Swing JButton reagiert nicht

3dprogger

Mitglied
Hallo, ich habe einen JButton initialisiert und in der Klasse einen ActionListener. Außerdem einen ActionListener für den Button mit addActionListener hinzugefügt.

Hier mein Quellcode:

Java:
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;


import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

import javax.swing.border.LineBorder;
import javax.swing.border.EmptyBorder;

import javax.swing.SwingUtilities;


import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;

import java.text.*;



 
  public class SiebzehnVier extends JFrame implements ActionListener  {
   JTextField sname1,sname2;
   JButton selectb, playb, exitb;
   int anzahl = 2;
   String [] spielernamen = new String[anzahl];
   JPanel spielPanel = new JPanel();
   JPanel spielerPanel = new JPanel();
   JPanel gegnerPanel = new JPanel();
   Runde r;
   int kartenmatrix [][] = new int[4][9];
   boolean namengesetzt=false;
   
  public int convertPoint(int x) {
  	switch(x) {
  	 case 2: return 0;
  	 case 3: return 1;
  	 case 4: return 2;
  	 case 7: return 3;
  	 case 8: return 4;
  	 case 9: return 5;
  	 case 10: return 6;
  	 case 11: return 7;
  	default: return -1;	 		
  	 } 
  	} 
  public String getKarte(int x) {
   String kette = "";
   int a,b,c;
   c=0; 
  b=convertPoint(r.werte[x]);
  if (b>-1){
   
  while (c == 0){
   a=(int)Math.random ()*4;  
   
   if (kartenmatrix[a][b]==0) {
    kette = "img/" + a + "0" + b + ".png";
    kartenmatrix[a][b]++; 
    c++;;
   }
 }  	
  }
  return kette;
}
  public void resetGame() {
   for(int j=0; j<4;j++)
    for(int k=0; k<9;k++)
     kartenmatrix[j][k]=0;
     	
   	
   
  	} 
   
  public void showGame() {
  	String kette="";
  	for(int i=0; i<6;i++) {
   	kette = getKarte(i);	
    if (!kette.equals("")) {
    spielerPanel.add(new JLabel(new ImageIcon(getKarte(i))));
    spielerPanel.add(new JLabel("Spielername: "+r.s[0].getSpielername()));
    spielerPanel.add(new JLabel("Spiele: "+r.s[0].getSpiele()));
    spielerPanel.add(new JLabel("Gewonnen: "+r.s[0].getGewonneneSpiele()));
    spielerPanel.updateUI();
      }
 	 }
   for(int i=6; i<10;i++) {
   	kette = getKarte(i);
   if (!kette.equals("")) {
   gegnerPanel.add(new JLabel(new ImageIcon(getKarte(i))));
   gegnerPanel.add(new JLabel("Spielername: "+r.s[1].getSpielername()));
   gegnerPanel.add(new JLabel("Spiele: "+r.s[1].getSpiele()));
   gegnerPanel.add(new JLabel("Gewonnen: "+r.s[1].getGewonneneSpiele()));
   gegnerPanel.updateUI();
   }
   repaint();
  }
}
   
   
  public SiebzehnVier() {
  	
  	initwindow();
    initUI();
    r = new Runde(anzahl, spielernamen);
    resetGame();
	repaint();	
   }
   
  public void actionPerformed(ActionEvent e) {
     if(e.getSource() == selectb){
      if (!namengesetzt){
      spielernamen[0]=sname1.getText();
      spielernamen[1]=sname2.getText();  
      namengesetzt=true;
      resetGame();
      
       }
        else {
         
   	     r.Spielstart();
   	     r.s[0].setSpiele();
   	     r.s[1].setSpiele();
        	}    
       }
       
    if(e.getSource() == playb){ 
     if (r.count < 10) { 
      r.s[r.count].setPunkte();
      r.count++;  
      r.s[r.count].setPunkte();
      r.count++;  
       }
        else {
         r.setGewinner();	
        }    
      }     
    if(e.getSource() == exitb) {
    	r.setGewinner();
    	} 
      repaint(); 
     }  
   
  public final void initUI() {
  	JMenuBar menubar = new JMenuBar();
        JMenu file = new JMenu("Datei");

        menubar.add(file);
        setJMenuBar(menubar);

  

        JToolBar vertical = new JToolBar(JToolBar.VERTICAL);
        vertical.setFloatable(false);
        vertical.setMargin(new Insets(10, 5, 5, 5));

        ImageIcon select = new ImageIcon("img/icon/agree.png");
        ImageIcon play = new ImageIcon("img/icon/play.png");
        ImageIcon exit = new ImageIcon("img/icon/exit.png");

        JButton selectb = new JButton(select);
        selectb.setBorder(new EmptyBorder(3, 0, 3, 0));

        JButton playb = new JButton(play);
        playb.setBorder(new EmptyBorder(3, 0, 3, 0));
        
        JButton exitb = new JButton(exit);
        exitb.setBorder(new EmptyBorder(3, 0, 3, 0));
        
        sname1 = new JTextField("Spielername 1",10);

        sname2 = new JTextField("Spielername 2",10);


        //sname1.setMaximumSize(new Dimension(200, vertical.getPreferredSize().height)); // setColumns(int);

        
        JToolBar toolbar = new JToolBar();
        toolbar.setFloatable(false);
		
		
		sname1.setMaximumSize(new Dimension(200, vertical.getPreferredSize().height));
		sname1.setBorder(LineBorder.createGrayLineBorder());
        toolbar.add(sname1);
        sname2.setBorder(LineBorder.createGrayLineBorder());
        sname2.setMaximumSize(new Dimension(200, vertical.getPreferredSize().height)); 
        toolbar.add(sname2);
        



        add(toolbar, BorderLayout.NORTH);

        selectb.addActionListener(this);
        playb.addActionListener(this);
        exitb.addActionListener(this);
        
        
        
        vertical.add(selectb);
        vertical.add(playb);  
        vertical.add(exitb);
        
        

        add(vertical, BorderLayout.WEST);
       
      
       
     
      // spielPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
       spielPanel.setLayout(new GridLayout(2, 1, 5, 5));
       spielPanel.setBackground(Color.GRAY);
       add(spielPanel, BorderLayout.CENTER);
	    
       
       spielerPanel.setBackground(Color.GRAY);
       spielerPanel.setBorder(LineBorder.createGrayLineBorder());
       gegnerPanel.setBackground(Color.GRAY);
       
       spielPanel.add(spielerPanel);
       spielPanel.add(gegnerPanel);


        JLabel statusbar = new JLabel(" Statusbar");
        statusbar.setPreferredSize(new Dimension(-1, 22));
        statusbar.setBorder(LineBorder.createGrayLineBorder());
        add(statusbar, BorderLayout.SOUTH);

      repaint(); 
    }
   
  
   
  public final void initwindow(){
   setTitle("Simulation: Siebzehn und Vier"); 
   setSize(800, 600);
   setLocationRelativeTo(null);
   setDefaultCloseOperation(EXIT_ON_CLOSE);
  }
  
  
  public static void main(String[] args) {
  	SwingUtilities.invokeLater(new Runnable() {
  		public void run() {
  			SiebzehnVier fenster = new SiebzehnVier();
  			fenster.setVisible(true);
      }
   });
  
   
   
   
 }
}
 
Mach mal vor Zeile 135:
[JAVA=135]
System.out.println("Ich wurde aufgerufen!");
[/code]
Und schau, was passiert, wenn du den Button drückst.
Ansonsten wird es für die Zukunft helfen, wenn du deinen geposteten Quelltext auf das wesentliche reduzierst, so dass du nur ein KSKB reinstellst.
 
Alles klar. Der Konsolenouput gibt die Message raus. Sprich ActionPerformed wird erkannt. Die Buttons sind doch global, wieso werden sie dann nicht erkannt?
 
Sind sie nicht. Durch
Code:
JButton
in Zeile 185 (ff) deklarierst du eine neue Methodenvariable, die nur innerhalb dieser Methode sichtbar ist.
 

Neue Themen


Zurück
Oben