[Java] Problem z Ikonami

dajana0
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 16 mar 2011, o 16:10
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 6 razy

[Java] Problem z Ikonami

Post autor: dajana0 »

Właśnie jestem w trakcie tworzenia warcab. I nie mogę sobie poradzić z Ikonmi, które służą za pionki. Gdy chwycę jeden chciałabym wiedzieć jaki trzymam (czerwony czy zielony, o takich kolorch mam pionki). Próbowałam już na wszystkie sposoby z

Kod: Zaznacz cały

Icon z = ((JLabel) component).getIcon();
, ale zawsze zwraca mi null, chyba że najadę jednym na drugi( wtedy zwraca tylko ten na którym postawiłam inny pionek). Prosze o pomoc


Jeszcze nie jest w pełni skończone, nie ma funkcji przypisanych do przycisków itp.

Kod: Zaznacz cały

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
import javax.swing.event.MouseInputListener;

public class DnD extends JFrame {

    private Icon greenIcon=new ImageIcon("GreenBall64.gif");
    private Icon redIcon= new ImageIcon("RedBall64.gif");
    private Icon KgreenIcon = new ImageIcon("KGreenBall64.gif");
    private Icon KredIcon= new ImageIcon("KRedBall64.gif");
    private Dimension icdim;
    private JPanel boardPane;
    private JLabel board[][];
    private JLabel dragged;
    private JLayeredPane layers;
    private MouseInputListener mouseHandler;
    private static final long serialVersionUID = 1L;
    private boolean player=true;
    private final JLabel message = new JLabel("Red make a move");
    private JTextField row = new JTextField(1);
    Timer timer;
	
	public DnD()
    {
        super("Checker");
        
        greenIcon = new ImageIcon("GreenBall64.gif");
        redIcon = new ImageIcon("RedBall64.gif");
        KgreenIcon = new ImageIcon("KGreenBall64.gif");
        KredIcon = new ImageIcon("KRedBall64.gif");
        icdim = new Dimension(greenIcon.getIconWidth() + 5, greenIcon.getIconHeight() + 5);
        boardPane = new JPanel();
        board = new JLabel[8][8];
        dragged = new JLabel();
        layers = getLayeredPane();
        mouseHandler = new MouseInputAdapter() {

            public void mousePressed(MouseEvent mouseevent)
            {
                src = (JLabel)mouseevent.getSource();
                System.out.println(src);
                srcLoc = src.getLocation();
                iniLoc = mouseevent.getPoint();
                dragged.setBounds(src.getBounds());
                dragged.setIcon(src.getIcon());
                src.setIcon(null);
                dragged.setVisible(true);
            }

            public void mouseReleased(MouseEvent mouseevent)
            {
                JLabel jlabel = (JLabel)mouseevent.getSource();
                Point point = jlabel.getLocation();
                Point point1 = mouseevent.getPoint();

                point.translate(point1.x, point1.y);
                Component component = boardPane.getComponentAt(point);
                System.out.println(component);

                JLabel jlabel1 = jlabel;
                
                if(hasIcon(component))
                	if(allowedMove(jlabel, component, mouseevent))
                		jlabel1 =(JLabel)component;
   
               
                System.out.println(jlabel+"
");
                jlabel1.setIcon(dragged.getIcon());
                dragged.setVisible(false);
                
            }

            public void mouseDragged(MouseEvent mouseevent)
            {
                dragged.setBounds((mouseevent.getX() + srcLoc.x) - iniLoc.x, (mouseevent.getY() + srcLoc.y) - iniLoc.y, icdim.width, icdim.height);
            }

            private JLabel src;
            private Point srcLoc;
            private Point iniLoc;
            private boolean dragging;
         

            
            
        };

        setLocation(800, 400);
        setDefaultCloseOperation(3);
        setResizable(false);
        fillBoard();
        dragged.setHorizontalAlignment(0);
        dragged.setPreferredSize(icdim);
        dragged.setVisible(false);
        layers.add(dragged, JLayeredPane.DRAG_LAYER);
    	JToolBar tools = new JToolBar();
        tools.setFloatable(false);
        
        final Timer tm = new Timer();
    	tm.start();
        
        JButton newGame = new JButton("New Game");
        newGame.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				tm.stop();
				newGame();
			}
		});
        tools.add(newGame);

        JButton save = new JButton("Save");
        save.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				
			}
		});
        tools.add(save);
        
        final JButton Resign = new JButton("Resign");
        tools.add(Resign);
        tools.addSeparator();
        tools.add(message);
        tools.addSeparator();
        save.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				
			}
		});
       
        tools.add(row);
        tools.addSeparator();
 
    	 final JButton exit = new JButton("Exit");
         exit.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				System.exit(0);
 			}
 		});
         tools.add(exit);
         add(tools,BorderLayout.PAGE_START);
         add(boardPane);
       
        pack();
        setVisible(true);
    }
	
	
	boolean hasIcon(Component component){
		Icon z = ((JLabel) component).getIcon();
		System.out.println(z); // pomocniczo do warunków
		if(z!=null)
			return false;
		else
			return true;
	}
	
	boolean allowedMove(JLabel jlabel, Component component, MouseEvent mouseevent){
		
    int x = jlabel.getX();
    int y = jlabel.getY();
    int x2=  component.getX();
    int y2=  component.getY();
    Icon z = ((JLabel) component).getIcon();
    System.out.println(y + " " + y2); // pomocniczo do warunków
    System.out.println(x+" "+x2); // pomocniczo do warunków
    System.out.println(z); // pomocniczo do warunków
    
    
    	if (player==true && y>y2){
    		if(x2>x){
    			if((x2-x)==69 &&(y-y2)==69){
    				player=false;
    				message.setText("Green");
    				return true;
    			}else
    				return false;	
    			
    		}else {
    			if((x-x2)==69 &&(y-y2)==69){
    				player=false;
    				message.setText("Green");
    				return true;
    			}else
    				return false;	
    		}
    		
    		}else if(player==false && y<y2){
    			if(x2>x){
    				if((x2-x)==69 &&(y2-y)==69){
    					player=true;
    					message.setText("Red");
    					return true;
    				}else
    					return false;	
			
    			}else{
    				if((x-x2)==69 &&(y2-y)==69){
    					player=true;
    					message.setText("Green");
    					return true;
    				}else
    					return false;	
    			}
    		}else
    			return false;
	}
	
	
    private void fillBoard()
    {
        int i = 0;
        boardPane.setLayout(new GridLayout(8, 8));
        
        for(int j = 0; j < 8; j++)
        {
            for(int k = 0; k < 8; k++)
            {
                Color color = i % 2 != 0 ? Color.WHITE : Color.BLACK;
                JLabel jlabel = new JLabel();
                if ( j % 2 == k % 2 ) 
                {
                	if(j <3 ) 
                	{
                	  Icon icon =  greenIcon;
                	  jlabel.setIcon(icon);
                	}
                	else if ( j>4)
                	{
                		Icon icon =  redIcon;
                		jlabel.setIcon(icon);
                	}
                	else
                	{
                		Icon icon = null;
                		jlabel.setIcon(icon);
                	}
                }
                else
                {
                	Icon icon = null;
                	jlabel.setIcon(icon);
                }
              
                jlabel.setHorizontalAlignment(0);
                jlabel.setPreferredSize(icdim);
                jlabel.setBackground(color);
                jlabel.setOpaque(true);
                jlabel.addMouseListener(mouseHandler);
                jlabel.addMouseMotionListener(mouseHandler);
                boardPane.add(jlabel);
                
                i++;
            }
            i++;
        }
    }


    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable() {
            public void run()
            {
                new DnD();
            }

        }
);
    }
}
-- 1 cze 2014, o 18:57 --Myślę że w ten sposób będzie to bardziej czytelne. Bardzo proszę o pomoc

Kod: Zaznacz cały

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
import javax.swing.event.MouseInputListener;

public class DnD extends JFrame {

    private Icon greenIcon=new ImageIcon("GreenBall64.gif");
    private Icon redIcon= new ImageIcon("RedBall64.gif");
    private Icon KgreenIcon = new ImageIcon("KGreenBall64.gif");
    private Icon KredIcon= new ImageIcon("KRedBall64.gif");
    private Dimension icdim;
    private JPanel boardPane;
    private JLabel board[][];
    private JLabel dragged;
    private JLayeredPane layers;
    private MouseInputListener mouseHandler;
    private static final long serialVersionUID = 1L;
    private boolean player=true;
    private final JLabel message = new JLabel("Red make a move");

	public DnD()
    {
        super("Checker");
        
        greenIcon = new ImageIcon("GreenBall64.gif");
        redIcon = new ImageIcon("RedBall64.gif");
        KgreenIcon = new ImageIcon("KGreenBall64.gif");
        KredIcon = new ImageIcon("KRedBall64.gif");
        icdim = new Dimension(greenIcon.getIconWidth() + 5, greenIcon.getIconHeight() + 5);
        boardPane = new JPanel();
        board = new JLabel[8][8];
        dragged = new JLabel();
        layers = getLayeredPane();
        mouseHandler = new MouseInputAdapter() {

            public void mousePressed(MouseEvent mouseevent)
            {
                src = (JLabel)mouseevent.getSource();
                System.out.println(src);
                srcLoc = src.getLocation();
                iniLoc = mouseevent.getPoint();
                dragged.setBounds(src.getBounds());
                dragged.setIcon(src.getIcon());
                src.setIcon(null);
                dragged.setVisible(true);
            }

            public void mouseReleased(MouseEvent mouseevent)
            {
                JLabel jlabel = (JLabel)mouseevent.getSource();
                Point point = jlabel.getLocation();
                Point point1 = mouseevent.getPoint();

                point.translate(point1.x, point1.y);
                Component component = boardPane.getComponentAt(point);

                JLabel jlabel1 = jlabel;
                
                if(hasIcon(component))
                	if(allowedMove(jlabel, component, mouseevent))

                			jlabel1 =(JLabel)component;

                jlabel1.setIcon(dragged.getIcon());
                dragged.setVisible(false);
            }

            public void mouseDragged(MouseEvent mouseevent)
            {
                dragged.setBounds((mouseevent.getX() + srcLoc.x) - iniLoc.x, (mouseevent.getY() + srcLoc.y) - iniLoc.y, icdim.width, icdim.height);
            }

            private JLabel src;
            private Point srcLoc;
            private Point iniLoc;
            private boolean dragging;

        };

        setLocation(800, 400);
        setDefaultCloseOperation(3);
        setResizable(false);
        fillBoard();
        dragged.setHorizontalAlignment(0);
        dragged.setPreferredSize(icdim);
        dragged.setVisible(false);
        layers.add(dragged, JLayeredPane.DRAG_LAYER);
    
        add(boardPane);
        pack();
        setVisible(true);
    }
	
	boolean hasIcon(Component component){
		Icon z = ((JLabel) component).getIcon();
		if(z!=null)
			return false;
		else
			return true;
	}
	
	boolean allowedMove(JLabel jlabel, Component component, MouseEvent mouseevent){
		
    int x = jlabel.getX();
    int y = jlabel.getY();
    int x2=  component.getX();
    int y2=  component.getY();

    	if (player==true && y>y2){
    		if(x2>x){
    			if((x2-x)==69 &&(y-y2)==69){
    				player=false;
    				message.setText("Green");
    				return true;
    			}else
    				return false;	
    			
    		}else{
    			if((x-x2)==69 &&(y-y2)==69){
    				player=false;
    				message.setText("Green");
    				return true;
    			}else
    				return false;	
    		}

    		}else if(player==false && y<y2){
    			if(x2>x){
    				if((x2-x)==69 &&(y2-y)==69){
    					player=true;
    					message.setText("Red");
    					return true;
    				}else
    					return false;	
			
    			}else{
    				if((x-x2)==69 &&(y2-y)==69){
    					player=true;
    					message.setText("Green");
    					return true;
    				}else
    					return false;	
    			}
    		}else
    			return false;
	}

    private void fillBoard()
    {
        int i = 0;
        boardPane.setLayout(new GridLayout(8, 8));
        
        
        for(int j = 0; j < 8; j++)
        {
            for(int k = 0; k < 8; k++)
            {
                Color color = i % 2 != 0 ? Color.WHITE : Color.BLACK;
                JLabel jlabel = new JLabel();
                if ( j % 2 == k % 2 ) 
                {
                	if(j <3 ) 
                	{
                	  Icon icon =  greenIcon;
                	  jlabel.setIcon(icon);
                	}
                	else if ( j>4){
                		Icon icon =  redIcon;
                		jlabel.setIcon(icon);
                	}else{
                		Icon icon = null;
                		jlabel.setIcon(icon);
                	}
                }else{
                	Icon icon = null;
                	jlabel.setIcon(icon);
                }
              
                jlabel.setHorizontalAlignment(0);
                jlabel.setPreferredSize(icdim);
                jlabel.setBackground(color);
                jlabel.setOpaque(true);
                jlabel.addMouseListener(mouseHandler);
                jlabel.addMouseMotionListener(mouseHandler);
                boardPane.add(jlabel);
                
                i++;
            }
            i++;
        }
    }
ODPOWIEDZ