Abfragen von Buttons in einem Panel einer anderen Klasse

Status
Nicht offen für weitere Antworten.
M

mabe

Gast
Hallo!

Da ich noch ein ziemlicher Anfänger in Sachen Java/Swing bin, mir meine Java-Bücher nicht weiterhelfen konnten und ich auch schon Stunden im Internet verbracht habe, um die Lösung zu finden, hoffe ich nun, dass ich hier die Antwort auf mein Problem finde.

Ich habe folgendes Problem:
Ich füge eine Klasse (JPanel) in mein "Programm" ein, auf dem sich zwei Buttons befinden. So weit, so gut. Doch wie kann ich nun aus meinem "Programm" prüfen, ob ein Button dieser Klasse gedrückt wurde.
(So wie in meinem beigefügten Quellcode sollte die Geschichte in etwa aussehen, nur möchte ich in der Klasse "Klassen" prüfen, ob ein Button gedrückt wurde, und nicht in der Klasse "Buttons")

Die "Buttons"-Klasse soll später eine eigene Datei werden, die universell verwendet werden kann
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Klassen
  {
  static JFrame frame;
  static Buttons button;

  public static void main(String[] args)
    {
    frame = new JFrame("Mehrere Klassen");

    button = new Buttons();
      frame.getContentPane().add(button);

    frame.pack();
    frame.setSize(300,80);
    frame.setVisible(true);
    }

  /*In dieser Klasse ('Klassen') möchte ich prüfen,
    ob ein Button gedrückt wurde.
    Leider schaffe ich es nur in der 'Buttons'-Klasse.
    Ich könnte mir vorstellen, dass ich auch hier
    einen Listener definieren muss. Da 'button' aber
    ein JPanel und kein JButton ist, weiß ich nicht,
    was ich "lauschen" soll.

    Etwa so:
      wenn button1 oder button2 gedrückt:
        System.exit(0);
  */
  }


class Buttons extends JPanel
  {
  Buttons()
    {
    setLayout(new FlowLayout());
    JButton button1 = new JButton("Button 1");
    JButton button2 = new JButton("Button 2");
      add(button1);
      add(button2);

    button1.addActionListener(new ButtonLauscher());
    button2.addActionListener(new ButtonLauscher());
    }

  class ButtonLauscher implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
      {
       System.out.println(e.getActionCommand());
      }
    }
  }
 
B

bygones

Gast
warum willst du das unbedingt in der klasse "klassen" machen ?

Aber ich würde das dann so machen.

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

public class Klassen   { 
  static JFrame frame; 
  static Buttons button; 

  public static void main(String[] args)    { 
    frame = new JFrame("Mehrere Klassen"); 

    button = new Buttons(this); 
    frame.getContentPane().add(button); 

    frame.pack();  // packt langt schon, da set er dir automatisch die benötigte größe
    frame.setVisible(true); 
  } 
  
  public void doButton1() {
  };

  public void doButton2() {
  }
} 

class Buttons extends JPanel  implements ActionListener { 
  private Klassen klassen
  public Buttons(Klassen klassen)  { 
  this.klassen = klassen
  setLayout(new FlowLayout()); 
  JButton button1 = new JButton("Button 1"); 
  JButton button2 = new JButton("Button 2"); 
  add(button1); 
  add(button2); 

  button1.addActionListener(this); 
  button2.addActionListener(this); 
 } 
 
  public void actionPerformed(ActionEvent e)  { 
    if(e.getActionCommand().equals("Button 1"){
      klassen.doButton1();
    }
    else {
      klassen.doButton2();
   }
  } 
 } 
}

aber ehrlich - für diese Anwendung halte ich eine extra Klasse "Buttons" für überflüssig. Wenn du in der Klasse "Klassen" einfach das JPanel so einfügst (also JPanel buttonPanel = new JPanel()....) - dann hast du auch nicht das Problem mit dem Übergeben
 
M

mabe

Gast
Hallo!

Der Grund, warum ich es aus "Klassen" abfragen möchte ist, dass durch einen Klick auf einen der Buttons in der Klasse "Klassen" etwas ausgeführt wird.

Ich werde mir deinen Vorschlag mal ansehen. Erstmals danke für die schnelle Antwort

mfg

Matthias
 
M

mabe

Gast
Hi!

Der Grund, warum nur zwei Buttons in der Klasse sind, liegt nur daran, dass ich das Beispiel für das Forum klein halten wollte. In meinem Programm sind viel mehr Elemente in dem Panel. Deshalb wollte ich es später in eine andere Datei auslagern und dann importieren, damit der Quellcode nicht zu lang wird.

So in etwa war es auch gemeint. Ich habe den Quellcode nun etwas umgeschrieben. Nur weiß ich nicht, was ich an Buttons übergeben muss. Wenn ich "this" übergebe, bekomme ich folgende Fehlermeldung:

Klassen.java:14: non-static variable this cannot be referenced from a static context
button = new Buttons(this);
^
1 error


Hier noch mal der geänderte Code:

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

public class Klassen
  {
  static JFrame frame;
  static Buttons button;

  public static void main(String[] args)
    {
    frame = new JFrame("Mehrere Klassen");

    button = new Buttons(this);
      frame.getContentPane().add(button);

    frame.pack();
    frame.setVisible(true);
    }
  }


class Buttons extends JPanel
  {
  private Klassen klassen;
  public Buttons(Klassen klassen) {
  this.klassen = klassen;

    setLayout(new FlowLayout());

    JButton button1 = new JButton("Button 1");
      button1.addActionListener(
        new ActionListener () {
          public void actionPerformed( ActionEvent e ) {
            System.out.println(e.getActionCommand());
          }
        } );

    JButton button2 = new JButton("Button 2");
      button2.addActionListener(
        new ActionListener () {
          public void actionPerformed( ActionEvent e ) {
            System.out.println(e.getActionCommand());
          }
        } );

      add(button1);
      add(button2);
    }
  }
 
B

bygones

Gast
du musst natürlich erst eine Instanz der Klasse erstellen !

Code:
Klassen k = new Klassen();
button = new Button(k);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Swing Buttons erst blinken lassen und dann abfragen, ob sie gedrückt worden sind AWT, Swing, JavaFX & SWT 2
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
S Labels abfragen AWT, Swing, JavaFX & SWT 6
karlmasutra Java FX Checkbox abfragen AWT, Swing, JavaFX & SWT 2
G Tastatur abfragen AWT, Swing, JavaFX & SWT 0
V RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln AWT, Swing, JavaFX & SWT 2
E 3D-Grafik LWJGl OpenGL Version vor Erstellung des Displays abfragen AWT, Swing, JavaFX & SWT 2
E Zustand der JCheckBox abfragen AWT, Swing, JavaFX & SWT 1
N 2D-Grafik AffineTransform - Punkte abfragen nach transform() AWT, Swing, JavaFX & SWT 3
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
M Mausposition auf JPanel abfragen und umrechnen AWT, Swing, JavaFX & SWT 9
O Jcheckbox Status nachträglich abfragen AWT, Swing, JavaFX & SWT 2
jueki Aktuell eingestellten Filter aus einem JFileChooser abfragen. AWT, Swing, JavaFX & SWT 5
A SWT Combo - wie Tastaureingabe abfragen AWT, Swing, JavaFX & SWT 3
M Checkboxen Namen setzten über Parameter => Abfragen? AWT, Swing, JavaFX & SWT 2
Psypsy Swing Abfragen ob ein Fenster verdeckt ist AWT, Swing, JavaFX & SWT 5
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
R Swing Abfragen, ob ein jButton gedrückt _IST_ AWT, Swing, JavaFX & SWT 6
C JFrame nach JPanel abfragen AWT, Swing, JavaFX & SWT 6
L Swing MousePosition in einem JPanel abfragen AWT, Swing, JavaFX & SWT 4
D Swing Tabellen-Namen im ListSelectionListener abfragen AWT, Swing, JavaFX & SWT 2
G Bildeigenschaften abfragen (Metadaten) AWT, Swing, JavaFX & SWT 7
T Swing JCheckBox: Wie getState() abfragen? AWT, Swing, JavaFX & SWT 2
X RGB abfragen von Image auf JFrame AWT, Swing, JavaFX & SWT 10
C Abfragen welcher Tab aktiv ist? AWT, Swing, JavaFX & SWT 2
G Großbuchstaben abfragen mit Keycode Methoden AWT, Swing, JavaFX & SWT 5
R Methode der Class im JComboBox abfragen AWT, Swing, JavaFX & SWT 2
Daniel_L Nachrichten/Event aus nicht-modalen Dialogen abfragen? AWT, Swing, JavaFX & SWT 4
G Abfragen, wann JFrame dargestellt ist AWT, Swing, JavaFX & SWT 3
H JProgressBar in TableColumn von JTable setzen/abfragen AWT, Swing, JavaFX & SWT 5
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
D Mit Java Postfach abfragen AWT, Swing, JavaFX & SWT 3
P Breite und Höhe des contentPane abfragen AWT, Swing, JavaFX & SWT 3
A Header abfragen, überprüfen AWT, Swing, JavaFX & SWT 23
F Checkboxen in JTable abfragen AWT, Swing, JavaFX & SWT 2
T (WACOM) Grafik Tablet abfragen AWT, Swing, JavaFX & SWT 3
O Abfragen beim öffnen oder danach ausführen? AWT, Swing, JavaFX & SWT 4
A JCheckBox abfragen AWT, Swing, JavaFX & SWT 6
G jComboBox abfragen? AWT, Swing, JavaFX & SWT 2
G Sicherheitseinstellungen für Verzeichnis abfragen WIN 2000 AWT, Swing, JavaFX & SWT 2
U JTable Position der Spalte abfragen AWT, Swing, JavaFX & SWT 7
R Zentral Veränderungen auf einer Maske/Formular abfragen AWT, Swing, JavaFX & SWT 6
T JRadioButton abfragen AWT, Swing, JavaFX & SWT 1
G wie abfragen wer event ausgelöst hat? AWT, Swing, JavaFX & SWT 2
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
F Wie bestimmte Obj. einer ContentPane abfragen und vergl? AWT, Swing, JavaFX & SWT 11
F Status von RadioButtons abfragen AWT, Swing, JavaFX & SWT 5
$ Layoutabhängige größe von JLabel für Icon abfragen AWT, Swing, JavaFX & SWT 2
G Bildpixel ansprechen und Farbwerte abfragen AWT, Swing, JavaFX & SWT 4
I Globale Tastatur-Events abfragen AWT, Swing, JavaFX & SWT 3
M JButton in JComponent abfragen AWT, Swing, JavaFX & SWT 6
V sellectAll() - Zustand abfragen AWT, Swing, JavaFX & SWT 8
D Farbe einer Grafik über den Cursor abfragen AWT, Swing, JavaFX & SWT 6
A instanceof einer JComboBox abfragen AWT, Swing, JavaFX & SWT 4
H Abfragen des Betriebssystems AWT, Swing, JavaFX & SWT 3
M Look and Feels dynamisch abfragen AWT, Swing, JavaFX & SWT 13
W JTextfield aktualisieren / Wert aus Datenbank neu abfragen AWT, Swing, JavaFX & SWT 2
L Inhalt von ausgewählte Spalten aus JTable abfragen AWT, Swing, JavaFX & SWT 4
C JList Inhalte abfragen AWT, Swing, JavaFX & SWT 2
P Tastendrücke abfragen AWT, Swing, JavaFX & SWT 3
H Mausereigniss abfragen AWT, Swing, JavaFX & SWT 2
A showConfirmDialog (Rückgabewert abfragen?) AWT, Swing, JavaFX & SWT 3
G JTextPane: Eigenschaften des selektierten Bereichs abfragen AWT, Swing, JavaFX & SWT 2
D Tastendruck abfragen AWT, Swing, JavaFX & SWT 16
O Display Env. Variable unter (X11) von ClientApp. abfragen AWT, Swing, JavaFX & SWT 2
T Pixel nach Farbwert abfragen AWT, Swing, JavaFX & SWT 2
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
jojoge Wie erstelle ich runde Buttons mit Farbe? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
volcanos SpringLayout mit zusätzlichen Buttons außerhalb des SpringLayout AWT, Swing, JavaFX & SWT 33
Z Switch Case für Buttons AWT, Swing, JavaFX & SWT 8
O Swing JOptionPane.showOptionDialog - Wie kann ich Buttons größer machen AWT, Swing, JavaFX & SWT 10
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
B JavaFX DropDown Menu mit ausführbaren Buttons AWT, Swing, JavaFX & SWT 1
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
CptK Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
J TicTacToe Buttons AWT, Swing, JavaFX & SWT 14
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
C Buttons funtionieren nicht AWT, Swing, JavaFX & SWT 10
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
Neumi5694 Sprache der Standard-Buttons AWT, Swing, JavaFX & SWT 7
Timo_neu_in_java Buttons Erstellen AWT, Swing, JavaFX & SWT 6
H JavaFX TableCell mit Buttons AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
kilopack15 Buttons ohne Funktion AWT, Swing, JavaFX & SWT 2
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26

Ähnliche Java Themen

Neue Themen


Oben