# Icon auf Button per Klick darauf ändern?



## Guest (18. Jun 2007)

Will wie gesagt ein bild per klick auf den button setzen.
Dachte da erst an den actionlistener...
aber das klappt nicht... 


```
ImageIcon x = new ImageIcon("x.gif");
ImageIcon o = new ImageIcon("o.gif");
```


```
JButton button1 = new JButton("1", new ImageIcon("o.gif"));
button1.setActionCommand("klick");
button1.addActionListener(this);
frame.add(button1);
```

und dann am ende


```
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Ende")) {
System.exit(0); 
} 

if (e.getActionCommand().equals("klick")) {
setIcon(x);
```

nun weis ich nicht warum das nicht geht  weis einer rat?


----------



## GrüneBohne (18. Jun 2007)

Hallo,

wenn es noch mehr zu tun gibt, dann

Zeile 7:


```
if (e.getSource().equals(button1)) button1.setIcon(x);
```

sonst reicht auch

Zeile 7:


```
button1.setIcon(x);
```

Gruß, Tom


----------



## Guest (18. Jun 2007)

also hier mal der ganze code:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ttt extends JFrame 
           implements ActionListener {

    private JTextField textfield;
    private JLabel label;

    public ttt(){
	super("TicTacToe");
        //Create and set up the window.
        JFrame frame = this;

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(3,4));
		
		ImageIcon x = new ImageIcon("x.gif"); //hier sind die pfade der icons...
		ImageIcon o = new ImageIcon("o.gif"); //sie müssen im selben ordner sein wie die class...
		
		/*Action bildanders = new AbstractAction( "button2", o); {
		public void bildandersPerformed(ActionEvent evt); {
			}
		}
		*/
        JButton button1 = new JButton("", new ImageIcon("o.gif"));
		button1.setActionCommand("klick");//<- also hier is der actioncommand mit KLICK benannt worden
		button1.addActionListener(this);      /* anhand diesem " klick " müsste nun der action listener die action abfangen und das bild ändern...- aber ich weis den aufruf nich :( */
        frame.add(button1);


        JButton button2 = new JButton(); //hier steht dann der name des icons drin der oben deklariert worden ist...
		button2.setActionCommand("Button 2");
        button2.addActionListener(this);
        frame.add(button2);
	
		
		JButton button3 = new JButton();
		button3.setActionCommand("Button 3");
        button3.addActionListener(this);
        frame.add(button3);
		
		
		JButton button4 = new JButton();
		button4.setActionCommand("Button 4");
        button4.addActionListener(this);
        frame.add(button4);


		JButton button5 = new JButton("");
		button5.setActionCommand("Button 5");
        button5.addActionListener(this);
        frame.add(button5);


        JButton button6 = new JButton("");
		button6.setActionCommand("Button 6");
        button6.addActionListener(this);
        frame.add(button6);

		
		JButton button7 = new JButton("");
		button7.setActionCommand("Button 7");
        button7.addActionListener(this);
        frame.add(button7);

		
		JButton button8 = new JButton("");
		button8.setActionCommand("Button 8");
        button8.addActionListener(this);
        frame.add(button8);
        
		JButton button9 = new JButton("");
		button9.setActionCommand("Ende");
        button9.addActionListener(this);
        frame.add(button9);

		
		//Das Frame
        
		frame.pack();
		frame.setSize(400,400);
        frame.setVisible(true);
    }
	
    public static void main(String[] args) {
	new ttt();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Ende")) 
            System.exit(0); 
        
		if (e.getSource().equals(button1)) button1.setIcon(x);
	    }
	}
```

aber ich bekomme 3 errors ausgegeben:

ttt.java:95: cannot find symbol
symbol : variable button1
location: class ttt
                    if (e.getSource().equals(button1)) *b*utton1.setIcon(x);

3 errors



-----

was genau bedeutet das?? probiere hier schon seit 4 h run 0.o ^^

wär klasse wenn jemand weiter wüsste..


----------



## GrüneBohne (18. Jun 2007)

Hallo,


so, nun ist es fehlerfrei:


```
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.*;

public class ttt extends JFrame implements ActionListener {

    ttt frame;
    private JTextField textfield;
    private JLabel label;
    
    JButton         button1, button2, button3, button4, button5, button6, button7, button8, button9;
    URL             imgURL_aktiv          = ttt.class.getResource("Address_Book.png");
    ImageIcon       img_aktiv             = new ImageIcon(imgURL_aktiv);
    
    public ttt(){
        super("TicTacToe");
        //Create and set up the window.
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(3,4));
      
        ImageIcon x = new ImageIcon(""); //hier sind die pfade der icons...
        ImageIcon o = new ImageIcon(""); //sie müssen im selben ordner sein wie die class...
      
        /*Action bildanders = new AbstractAction( "button2", o); {
        public void bildandersPerformed(ActionEvent evt); {
        }
        }
        */
        JButton button1 = new JButton("", img_aktiv);
        button1.setActionCommand("klick");//<- also hier is der actioncommand mit KLICK benannt worden
        button1.addActionListener(this);      /* anhand diesem " klick " müsste nun der action listener die action abfangen und das bild ändern...- aber ich weis den aufruf nich :( */
        add(button1);


        JButton button2 = new JButton(); //hier steht dann der name des icons drin der oben deklariert worden ist...
        button2.setActionCommand("Button 2");
        button2.addActionListener(this);
        add(button2);
   
        JButton button3 = new JButton();
        button3.setActionCommand("Button 3");
        button3.addActionListener(this);
        add(button3);
      
      
        JButton button4 = new JButton();
        button4.setActionCommand("Button 4");
        button4.addActionListener(this);
        add(button4);

        JButton button5 = new JButton("");
        button5.setActionCommand("Button 5");
        button5.addActionListener(this);
        add(button5);

        JButton button6 = new JButton("");
        button6.setActionCommand("Button 6");
        button6.addActionListener(this);
        add(button6);

      
        JButton button7 = new JButton("");
        button7.setActionCommand("Button 7");
        button7.addActionListener(this);
        add(button7);

      
        JButton button8 = new JButton("");
        button8.setActionCommand("Button 8");
        button8.addActionListener(this);
        add(button8);
       
        JButton button9 = new JButton("");
        button9.setActionCommand("Ende");
        button9.addActionListener(this);
        add(button9);

      
        //Das Frame
        pack();
        setSize(400,400);
        setVisible(true);
    }
   
    public static void main(String[] args) {
    ttt frame = new ttt();
    }
    
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Ende")){
            System.exit(0);
            
        } else if (e.getSource().equals(button1)) button1.setIcon(img_aktiv);
        
    }
    
}
```

Habe natürlich nur deinen Code lauffähig gemacht (und das Pic. ersetzt) Hast ja noch bisschen zu tun 


Dann mach mal weiter...

Gruß Tom[/code]


----------



## Guest (18. Jun 2007)

hey - vielen dank, 

habe oben die bildurl geändert:


```
JButton         button1, button2, button3, button4, button5, button6, button7, button8, button9;
    URL             imgURL_aktiv          = ttt.class.getResource("o.gif");
    ImageIcon       img_aktiv             = new ImageIcon(imgURL_aktiv);
```

und zusätzlich halt unten noch code für button2 hinzugefügt:


```
public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Ende")){
            System.exit(0);
           
        } else if (e.getSource().equals(button1)) button1.setIcon(img_aktiv);
       else if (e.getSource().equals(button2)) button2.setIcon(img_aktiv);
    }
```

aber wenn ich auf button2 klicke passiert nix... warum?

bin eeeends dankbar für die bisherige hilfe!!


----------



## GrüneBohne (18. Jun 2007)

So,

versuche das mal zu verstehen ....


```
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.*;

public class ttt extends JFrame implements ActionListener {

    ttt frame;
    
    int klicks      = 0;
    
    JButton         button1, button2, button3, button4, button5, button6, button7, button8, button9;
    URL             imgURL_aktiv          = ttt.class.getResource("Address_Book.png"),
                    imgURL_passiv         = ttt.class.getResource("Address_Book_d.png");
    
    ImageIcon       img_aktiv             = new ImageIcon(imgURL_aktiv),
                    img_passiv            = new ImageIcon(imgURL_passiv);
    
    public ttt(){
        super("TicTacToe");
        //Create and set up the window.
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(3,4));
      
        JButton button1 = new JButton("");
        button1.setActionCommand("klick");//<- also hier is der actioncommand mit KLICK benannt worden
        button1.addActionListener(this);      /* anhand diesem " klick " müsste nun der action listener die action abfangen und das bild ändern...- aber ich weis den aufruf nich :( */
        add(button1);


        JButton button2 = new JButton(); //hier steht dann der name des icons drin der oben deklariert worden ist...
        button2.setActionCommand("Button 2");
        button2.addActionListener(this);
        add(button2);
   
        JButton button3 = new JButton();
        button3.setActionCommand("Button 3");
        button3.addActionListener(this);
        add(button3);
      
      
        JButton button4 = new JButton();
        button4.setActionCommand("Button 4");
        button4.addActionListener(this);
        add(button4);

        JButton button5 = new JButton("");
        button5.setActionCommand("Button 5");
        button5.addActionListener(this);
        add(button5);

        JButton button6 = new JButton("");
        button6.setActionCommand("Button 6");
        button6.addActionListener(this);
        add(button6);

      
        JButton button7 = new JButton("");
        button7.setActionCommand("Button 7");
        button7.addActionListener(this);
        add(button7);

      
        JButton button8 = new JButton("");
        button8.setActionCommand("Button 8");
        button8.addActionListener(this);
        add(button8);
       
        JButton button9 = new JButton("");
        button9.setActionCommand("Button 9");
        button9.addActionListener(this);
        add(button9);

      
        //Das Frame
        pack();
        setSize(400,400);
        setVisible(true);
    }
   
    public static void main(String[] args) {
    ttt frame = new ttt();
    }
    
    public void actionPerformed(ActionEvent e) {
        
        // Anzahl der Klicks um 1 erhöhen
        klicks +=1;
        
        // jetzt feststellen welcher Button gedrückt wurde
        JButton button = (JButton)e.getSource();
        
        // wenn es ein "ungerader Klick" war
        if (klicks % 2 == 0) {
           
            button.setIcon(img_aktiv);
            
        
        // sonst war es ein "gerader Klick"
        } else {
            
            button.setIcon(img_passiv);
            
        }
        
    }
    
}
```

Und dann musst Du Dir nur noch was einfallen lassen, damit man keinen Button 2x anklicken kann. Und am Ende wäre es noch toll, wenn dein Programm feststellen könnte, ob jemand gewonnen hat....  :toll: 

Das wäre doch ein Projekt zum Java lernen, oder?!

Gruß, Tom[/code]


----------



## Gast (18. Jun 2007)

heeey suuuuper!!!!

vielen dank..

ich denke man könnte die mausklicks mitzählen und dann den button deaktivieren? oder gibt es elegantere methoden? so ein "button klick limiter"


----------



## Agassiz (18. Jun 2007)

soo

habe jetz die idee, neben den icons gleichzeitig ein label zu setzen...

also "X" oder "O"

um diese dann auszulesen bräuchte man doch dann nur die label der buttons vergleichen damit das spiel beendet wird oder eine fehlermeldung ausgegeben wird. :? 


oder?


----------



## GrüneBohne (19. Jun 2007)

Hallo,

erstmal ne Frage "Gast" und "Aggassiz" ist wohl ein und derselbe??

Dann zum Thema: es gibt bestimmt (wie immer) vile Wege nach Rom. Mach Dir einfach erstmal Gedanken und setze das um. So lernst Du am besten Java! Wenn es dann zu Komplikationen kommt, kannst Du ja wieder posten! Viel Erfolg,

Gruß, Tom.


----------



## Agassiz (19. Jun 2007)

sooo

bin eigentlich soweit fertig... habe hier mal für die die es interessiert den code zum ausprobieren 


```
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.*;

public class ttt extends JFrame implements ActionListener {

    
	
	static ttt frame;
   
    int klicks      = 0;
   //Die Buttons die später gebraucht werden..
    JButton         button1, button2, button3, button4, button5, button6, button7, button8, button9, buttonend, buttonre;
    URL             imgURL_aktiv          = ttt.class.getResource("o.GIF"),
                    imgURL_passiv         = ttt.class.getResource("x.GIF");
   
    ImageIcon       img_aktiv             = new ImageIcon(imgURL_aktiv),  //Kreis
                    img_passiv            = new ImageIcon(imgURL_passiv); //Kreuz

	private JTextField textfield;
   
    public ttt(){
        super("TicTacToe");
       
	    //Die Buttons
   

        //Quit Funktion und andere Buttons
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(4,3));
     
        button1 = new JButton("1");
        button1.setActionCommand("button1");   
        button1.addActionListener(this);      
        add(button1);


        button2 = new JButton("2"); 
        button2.setActionCommand("button2");
        button2.addActionListener(this);
        add(button2);
   
        button3 = new JButton("3");
        button3.setActionCommand("button3");
        button3.addActionListener(this);
        add(button3);
     
     
        button4 = new JButton("4");
        button4.setActionCommand("button4");
        button4.addActionListener(this);
        add(button4);

        button5 = new JButton("5");
        button5.setActionCommand("button5");
        button5.addActionListener(this);
        add(button5);

        button6 = new JButton("6");
        button6.setActionCommand("button6");
        button6.addActionListener(this);
        add(button6);

     
        button7 = new JButton("7");
        button7.setActionCommand("button7");
        button7.addActionListener(this);
        add(button7);

     
        button8 = new JButton("8");
        button8.setActionCommand("button8");
        button8.addActionListener(this);
        add(button8);
       
        button9 = new JButton("9");
        button9.setActionCommand("button9");
        button9.addActionListener(this);
        add(button9);
           

        // Das Textfeld
        textfield = new JTextField("Spielstart");
    	textfield.setColumns(3);
        add(textfield);    
        

        buttonre = new JButton("Refresh");
        buttonre.setActionCommand("buttonre");
        buttonre.addActionListener(this);
        add(buttonre);
        
        buttonend = new JButton("Quit");
        buttonend.setActionCommand("buttonend");
        buttonend.addActionListener(this);
        add(buttonend);
 
        
        
        //Das Frame
        pack();
        setSize(400,400);
        setVisible(true);
    }
   
    public static void main(String[] args) {
         	
    	 	ttt frame = new ttt();
    }
        
      public void actionPerformed(ActionEvent e) {
       
    		if (e.getActionCommand().equals ("buttonend")){
    			System.exit(0);}
    	  
    	  // Anzahl der Klicks zaehlen
        klicks +=1;


        // jetzt feststellen welcher Button gedrückt wurde
        JButton button = (JButton)e.getSource();
       	   
		// bei geraden klicks erscheint ein O   
        if (klicks % 2 == 0 && klicks<9) { 
           
            button.setIcon(img_aktiv);
            button.setText("O");
      
        // bei ungeraden ein X
        } else {
        	if (klicks <=9) {
           
            button.setIcon(img_passiv);
			button.setText("X");
        	}
        	else {;}
        		
        }
            
        //Der Refresh Button und seine Aktionen    
            
        if (e.getActionCommand().equals ("buttonre")){
        	button1.setText("1");
        	button2.setText("2");
        	button3.setText("3");
        	button4.setText("4");
        	button5.setText("5");
        	button6.setText("6");
        	button7.setText("7");
        	button8.setText("8");
        	button9.setText("9");
            buttonre.setText("Refresh");
            buttonre.setIcon(null);
            textfield.setText("Neustart.");
        	klicks = 0;    
            
        	button1.setIcon(null);
        	button2.setIcon(null);
        	button3.setIcon(null);
        	button4.setIcon(null);
        	button5.setIcon(null);
        	button6.setIcon(null);
        	button7.setIcon(null);
        	button8.setIcon(null);
        	button9.setIcon(null);   
       
        }
                	
       
			//Reaktion bei Sieg, wird die klickzahl auf 10 gesetzt und man kann nicht mehr weiterspielen (ausgabe erscheint in konsole!!!!)
	   
        if (button1.getText() == button2.getText() && button1.getText() == button3.getText()){	
        		System.out.println("Sieg in der ersten Reihe von Spieler '" +button1.getText()+"'");
         		klicks = 10; }
                
        if (button4.getText() == button5.getText() && button4.getText() == button6.getText()) {
  		   System.out.println("Sieg in der zweiten Reihe von Spieler '" +button4.getText()+"'");
        klicks = 10; }
        
        if (button7.getText() == button8.getText() && button7.getText() == button9.getText()){
  		   System.out.println("Sieg in der ersten Reihe von Spieler '" +button7.getText()+"'");
        klicks = 10; }
        
        if (button1.getText() == button4.getText() && button4.getText() == button7.getText()){
   		   System.out.println("Sieg in der ersten Spalte von Spieler '" +button7.getText()+"'");
        klicks = 10; }
        
        if (button2.getText() == button5.getText() && button5.getText() == button8.getText()){
   		   System.out.println("Sieg in der zweiten Spalte von Spieler '" +button8.getText()+"'");
        klicks = 10; }
        
        if (button3.getText() == button6.getText() && button6.getText() == button9.getText()) {
   		   System.out.println("Sieg in der dritten Spalte von Spieler '" +button9.getText()+"'");
        klicks = 10; }
        
        if ((button1.getText() == button5.getText() && button5.getText() == button9.getText())   
        		|| (button3.getText() == button5.getText() && button7.getText() == button5.getText())){
   		   System.out.println("Sieg in der Diagonalen von Spieler '" +button5.getText()+"'");
        klicks = 10; }
        
		
		//Bei unentschieden:
        if (klicks == 9) 
            textfield.setText("Unentschieden!");
        
        
        
        	        }
	       }
```

die zwei bilder die hergehören könnt ihr selber erstellen....

x.GIF

und 

o.GIF

mal schnell mit paint 


und nochmal danke für eure hilfe


----------

