Probleme mit der JButton Methode

Hallo,

ich habe mal wieder ein Problem, und zwar habe ich mein Programm zwar schon soweit ausgebaut dass ich ein Icon im Fenster und ein Icon in der Fensterleiste einbauen kann und mit einem Textfeld, jedoch habe ich noch Probleme mit den Buttons.

Mein eigentliches Programm soll eine art Counter sein, ein Button „Plus 1“ der in der anzeige immer um ein hochzählt wenn man ihn geklickt hat und ein Button „Clear“ der den Anzeigestand wieder nullen soll.

Hier mal mein Code:

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

public class Fenster extends JFrame {

Buttotaction ba = new Buttotaction();

public Fenster() {
super(„Fenster nach Swing art“);

//getContentPane().setLayout(new BorderLayout(500,500));

// Icon im Fenster und in der Startleiste verändern
Image img = Toolkit.getDefaultToolkit().getImage(„himym.gif“);
setIconImage(img);

//Panel (Untergrund) für den Text hinzufügen
JPanel untergrund = new JPanel();

//Label (text) erzeugen
JLabel text = new JLabel(„Bitte geben Sie ihren Benutzernamen ein“, new ImageIcon(„himym2.gif“), SwingConstants.LEFT);
JTextField anzeige = new JTextField(25);

//Label (text) auf Panel (Untergrund) befestigen
untergrund.add(text);

//Ein Textfeld
JTextField textfeld = new JTextField(30);
textfeld.setToolTipText(„Das ist ein Textfeld“);

//neues Textfeld (nach JTextfield Art) an Panel (Untergrund) befestiegen
untergrund.add(textfeld);

//Festlegung des Urspungs, (wo es erscheinen soll)
untergrund.setBorder(BorderFactory.createEtchedBorder());
getContentPane().add(untergrund, BorderLayout.NORTH);

JButton button1 = new JButton(„Plus 1“);
button1.addActionListener(new Buttotaction());

JButton button2 = new JButton(„Clear“);
button2.addActionListener(new Buttotaction());

JPanel jp_est = new JPanel();
JPanel jp_west = new JPanel();

jp_est.add(anzeige);

jp_west.add(anzeige);

anzeige.add(jp_est, BorderLayout.EAST);
anzeige.add(jp_west, BorderLayout.WEST); //Zeile 66

//Es gibt zwei Methoden ein Fenster zu schließen die JFrame Methode, die sowieso vererbt wird und eine selbstgeschriebene
//Von JFrame vererbet Methode das fenster zu schließen WindowsListener
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//WindwowListener vordert eine Klasse zum schließen des Fensters
//addWindowListener(new WindowClosingAdapter(true)); dafür muss aber die WindowClosingAdapter Klasse in dem gleiche Package sein!

}

class Buttotaction implements ActionListener // Für Funktion des Programms
{

final JLabel anzeige = new JLabel(„drücken Sie auf Plus 1“);

public void actionPerformed(ActionEvent e) {
String button = e.getActionCommand();

for (int i = 1; button.equals(„Clear“); i++) {
anzeige.setText(„Sie haben bisher " + i + " mal geklickt“);
}

if (button.equals(„Claer“)) {
anzeige.setText(„Ihre klickst wurden gelösct“);
}

}
}

public static void main(String[] args) {
Fenster swing = new Fenster(); //Zeile 100
swing.pack();
swing.setSize(800, 500);
swing.setLocation(300, 150);
swing.setVisible(true);

}
}

Kompiliert wird das Programm nur bei ausführen zeigt er in Zeile 66 und in Zeile 100 noch ein Fehler an, meine IDE zeigt den Fehler aber nicht an, kann mir jemand sagen wie und was ich ändern muss damit das, mit den Buttons funktioniert?

danke schonmal, liebe Grüße Matthias

Also eine Möglichkeit den Fehler zu beseitigen wäre Anstatt das JTextfield anzeige dein JPanel untergrund zu nehmen :wink:

jp\_est.add(anzeige);

 jp\_west.add(anzeige);

 untergrund.add(jp\_est, BorderLayout.EAST);
 untergrund.add(jp\_west, BorderLayout.WEST); // Zeile 66

Die Frage ist ob du das dann so wolltest wie es danach aussieht. Aber da bekommst wenigstens etwas angezeigt :smile:

Viele Grüße!

Zu deinem Buttonproblem. Ist evtl nicht die eleganteste Methode aber für solch einfache Aufgaben kannst du auch ne Annonyme Klasse verwenden:

 JButton button1 = new JButton("Plus 1");
 button1.addActionListener(new ActionListener() {

 @Override
 public void actionPerformed(ActionEvent arg0) {
 // TODO Auto-generated method stub
 System.out.println("do something");
 }

 });

Bei der Aufteilung deines Fensters musst du glaub ich auch nochmal schaun wo was liegt. Viele Grüße!

1 Like

Hallo Waschndolos,

super danke das Textfeld hab ich nur gemacht weil ich nicht wusste ob es mit einem JPanel funktioniert, ich hab das auch schonmal probiert, dann hate ich da bestimmt einen Fehler drin, denn eigentlich wollte ich es auch garnicht als Textfield :smile:

aber ich schreibe doch dann trotzdem ein Panel für den untergrund und dann ein Label für die Ausgabe oder?

Ich werde es gleich ausprobieren danke nochmal :smile:

liebe Grüße Matthias

Problem gelöst :smile:
Hallo Waschndolos, :smile:

super toll :smile: ich bin so happy :smile: es hat funkzioniert, vielen vielen Dank :smile:

Hier nochmal mein endgültiger Code

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

public class Test extends JFrame {

JLabel anzeige = new JLabel();
String str;
JButton button1 = new JButton(„Plus 1“);
int i = 0;

public Test() {
//Fenster mit Fensternamen erstellen
super(„counter“);

//schließen Option festlegen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Panels erstellen
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();

//Buttons erstellen
//JButton button1 = new JButton(„Plus 1“);

button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

i++;

anzeige.setText(„Sie haben " + i + " mal geklickt“);

}
});

JButton button2 = new JButton(„Clear“);
button2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
i=0;
anzeige.setText("Die Anzeige wurde zurueck gesetzt, Sie sind wieder bei " + i);

}
});

//JButton button2 = new JButton(„Clear“);

//anzeige erstellen
//JLabel anzeige = new JLabel();

//Button auf Panel befestigen
panel1.add(button1);
panel2.add(button2);
panel3.add(anzeige);

getContentPane().add(BorderLayout.WEST, panel1);
getContentPane().add(BorderLayout.CENTER, panel2);
getContentPane().add(BorderLayout.EAST, panel3);

}

public static void main(String[] args) {
// Buttotaction ba = new Buttotaction();
Test t = new Test();
t.pack();
t.setSize(800, 500);
t.setLocation(300, 150);
t.setVisible(true);

}
}

liebe Grüße Matthias

Cool freut mich!
Viele Grüße!

1 Like