JButtons indexiert unter NetBeans anlegen

Tecwan

Aktives Mitglied
Hallo.

Nach mehreren Jahren Pause vom Programmieren steige ich von VisualBasic auf Java um und benutze die NetBeans IDE 7.0.1 als Umgebung.

Ich stehe vor folgendem Problem(chen?):
Mit dem GUI-Editor habe ich mein Interface gebastelt und mir das Codegerüst generieren lassen.
Dabei benutze ich eine ganze Reihe Eingabeelemente gleicher Art, für die ich jeweils Code einfügen muss, also etwa:
Java:
private void nr1ButtonActionPerformed(java.awt.event.ActionEvent evt) {
	machwas(1);
}
.
.
private void nr10ButtonActionPerformed(java.awt.event.ActionEvent evt) {
	machwas(10);
}

Wie stelle ich es an, nicht für jedes Element eine eigene Methode schreiben (bzw. umleiten, s.o.) zu müssen?
Ich hätte gerne etwas in der Art
Java:
private void numberedButtonActionPerformed(int buttonIndex, java.awt.event.ActionEvent evt){
	System.out.println( "Ich bin Button #" + buttonIndex);
}

Wie kann ich die Buttons (und andere Elemente) bereits in NetBeans GUI-Editor indexiert erstellen, so dass ich anstelle von zig "nr#Button [JButton]" zig "Button(nr) [JButton]"
erhalte?

Ich nehme an, ich muss hierzu nur etwas in NetBeans einstellen - aber wo? Eine einfache Zuordnung der Buttons zu einer ButtonGroup tuts jedenfalls nicht.
 

Meru

Bekanntes Mitglied
Lass deine Klasse einen ActionLIstener implementieren
Java:
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");


button1.addActionListener(this);
button2.addActionListener(this);





public void actionPerformed(ActionEvent e){
  JButton b = (JButton)e.getSource();
  System.out.println(b.getName());
  machewas(b.getName());


  // oder

  if (e.getSource() == this.button1){
    // mache dies
  }else if (e.getSource() == this.button2){
    // mache was anderes
  }
}
 

Tecwan

Aktives Mitglied
@Meru
Danke für den blitzschnellen Vorschlag.

Ja, das Einschieben von Referenzen bei der Deklaration ist eine Möglichkeit, aber leider nicht ganz die Antwort auf meine Frage.

Mir wird der Code für meine JButtons (Deklaration und EventHandler) von der IDE bereits vorgegeben und gewissermaßen gesperrt; der Editor überschreibt nach jeder Änderung die Deklarationen. Ich möchte daran auch nichts ändern; schließlich ist die Automation ja einer der größten Vorteile.

Ich suche tatsächlich nach einer Lösung, die mir die NetBeans IDE liefern kann.
Ich bin mir im Klaren, dass das hier kein NetBeans-Forum ist, aber ich denke, dass genügend Nutzer unter NetBeans arbeiten und hoffe, man möge mir da verzeihen.
 

Michael...

Top Contributor
Mir wird der Code für meine JButtons (Deklaration und EventHandler) von der IDE bereits vorgegeben und gewissermaßen gesperrt;
Vom GUI Editor eine IDE gibt sowas nicht vor.
schließlich ist die Automation ja einer der größten Vorteile.
Ansichtssache...
Ich suche tatsächlich nach einer Lösung, die mir die NetBeans IDE liefern kann.
Ich bin mir im Klaren, dass das hier kein NetBeans-Forum ist, aber ich denke, dass genügend Nutzer unter NetBeans arbeiten und hoffe, man möge mir da verzeihen.
Was konstruktives kann ich hier nicht beitragen ;-)

Aber ich vermute mal, dass man mit einem GUI-Builder nicht um diese 1bisNButtonActionPerformed herumkommt - so schlau sind diese m.W. noch nicht. Aber in den letzten Jahren kann sich ja viel verändert haben...
 

Tecwan

Aktives Mitglied
Tja, leider scheint NetBeans diese Technik tatsächlich (noch?) nicht anzubieten.
Das ist etwas ärgerlich, denn mit VB war das zumindest Ende der 90er kein Problem.
 

membersound

Bekanntes Mitglied
Du kannst das bequem ohne Listeners mit AbstracActions machen:

Java:
private final Action buttonAction = new AbstractAction() {
    public void actionPerformed(ActionEvent actionEvent) {
        System.exit(1);
    }
};
    
public Action getButtonAction() {
    return quitAction;
}

Danach kannst du in den Button Properties unter "action" zB diese buzzonAction auswählen. (oder manuell myJButton.setAction(getButtonAction()); irgendwo eintragen)

In der actionPerformed() musste dann je nach dem wie oben jemand schon geschrieben hat mit switch(e.getSource...) Fallunterscheidung einführen.

Oder du gibst in den Button Properties bei "name" die Namen für die Button ein. Und in der ActionPerformed() lässt du dir den Namen ausgeben mit .getName();
 
Zuletzt bearbeitet:

Tecwan

Aktives Mitglied
Vielen Dank, die Realisierung unter NetBeans ohne neue Listener gefällt mir gut.

Allerdings hatte ich zunächst Schwierigkeiten, das umzusetzen. (Der Codeschnipsel funktioniert so ja nicht.)

Hier der Code, mit dem sich die Reaktion auf Events von Swing-Komponenten unter NetBeans realisieren lässt:

Java:
// im package:
import javax.swing.*;
import java.awt.event.*;

public class Fenster extends javax.swing.JFrame {

// weggelassen: (GUI-Designer-erzeugter) Code, der Fenster erzeugt und anzeigt, u.a. die main() 
// angelegt wurden im GUI Designer viele jButton#, wobei # für den automatisch vergebenen Index steht
// Im GUI Editor erhielten die Buttons händisch
//	- die property name, zB. # (also 1, 2, ...)
//	- die property action, in Property/Form/ "buttonAction" eingesetzt
//		das ergibt den Custom Code jButton#.setAction(getButtonAction());
//
// nach der main() kommen noch die (automatischen) Deklarationen der Buttons (hier weggelassen)
 

    private final Action buttonAction = new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JButton callerButton = (JButton) actionEvent.getSource();
            System.out.println( "jButton" + callerButton.getName() + " geklickt" );
        }
    };

    public Action getButtonAction() {
        //Aufruf einmalig bei Initialisierung der Buttons 
        return buttonAction;
    }
}

Was "macht" der Code?
Bei den Buttons wird als name ein Index eingetragen, das erlaubt später festzustellen, der wievielte Button denn nun auf den actionPerformed-Event reagiert hat. Unter der property action der Buttons wird im Designer angegeben, dass die Events der Buttons von
Code:
buttonAction
ausgeführt werden soll (actionPerformed wird überschrieben).
Bei Initialisierung der Buttons mit eingetragener action "buttonAction" wird
Code:
getButtonAction()
aufgerufen und verankert
Code:
buttonAction
als Methode, die beim Auslösen eines Events durch den Button aufgerufen werden soll.
Klickt nun der Anwender auf einen der Buttons, wird anstelle des "automatischen" jButtonActionPerformed() unsere Methode aufgerufen. Anstelle für jeden der vielen Buttons eine Methode schreiben zu müssen, braucht man nun nur diese eine Methode.
Um festzustellen, welcher der Buttons nun gefeuert hat, kann man mit actionEvent.getSource() die Quelle holen. Castet man dieses Objekt auf die genauere Klasse (JButton, JTextField, JCheckBox ...), hat man auch Zugriff auf deren Klasseneigenschaften und kann sie zB. mit getName() auslesen. In unserem Fall erhält man als Namen die Nummer des Buttons (als String).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
H Auswahlmenü mit JButtons AWT, Swing, JavaFX & SWT 4
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
N "Automatisches" erstellen von jButtons AWT, Swing, JavaFX & SWT 1
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
S JButtons an Koordinaten setzen AWT, Swing, JavaFX & SWT 3
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
M Swing Selbstanordnende JButtons AWT, Swing, JavaFX & SWT 4
J EventHandler Bei JButtons AWT, Swing, JavaFX & SWT 2
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
F JButtons erstellen lassen mit unterschiedlichen Funktionen AWT, Swing, JavaFX & SWT 3
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
Kenan89 LayoutManager JPanel wächst beim adden neuer JButtons nicht mit AWT, Swing, JavaFX & SWT 4
A JButtons - es wird beim falschen Button die Hintergrundfarbe angepasst AWT, Swing, JavaFX & SWT 2
Z kleine JButtons und ihre Beschriftung AWT, Swing, JavaFX & SWT 5
K Swing Abgerundete JButtons AWT, Swing, JavaFX & SWT 8
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
J JButtons in aktivieren und deaktivieren AWT, Swing, JavaFX & SWT 3
H JButtons in JTable anzeigen AWT, Swing, JavaFX & SWT 5
T Maximale Länge eines JButtons AWT, Swing, JavaFX & SWT 5
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
R Swing Verschieben eines jButtons mittels MouseDragged AWT, Swing, JavaFX & SWT 4
K Runde JButtons ? AWT, Swing, JavaFX & SWT 7
B Swing JButtons in eine Arraylist<JButton> einfügen AWT, Swing, JavaFX & SWT 2
G Swing JButtons + ActionListener + final AWT, Swing, JavaFX & SWT 3
U Problem mit JButtons AWT, Swing, JavaFX & SWT 6
C Interface für JButtons,... AWT, Swing, JavaFX & SWT 7
J Swing JButtons und die ActionEvents AWT, Swing, JavaFX & SWT 2
P JButtons haben nicht immer lust zu erscheinen AWT, Swing, JavaFX & SWT 9
U Grafikkontext unter JButtons? AWT, Swing, JavaFX & SWT 5
Strahlungsleck Funktionalität von JButtons (Actionlistener etc.) AWT, Swing, JavaFX & SWT 17
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
F Sender für jButtons? AWT, Swing, JavaFX & SWT 2
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
J JButtons in Tabellenspalten anzeigen AWT, Swing, JavaFX & SWT 2
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
N Minesweeper: 2D Feld von JButtons anlegen AWT, Swing, JavaFX & SWT 19
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
U Bilder, JLabels, JButtons voreinander AWT, Swing, JavaFX & SWT 7
D Darstellungsprobleme bei JButtons auf JInternalFrames AWT, Swing, JavaFX & SWT 4
A Hintergrundfrabe eines JButtons innerhalb eines JToolBar AWT, Swing, JavaFX & SWT 4
T Ausrichtung eines Jbuttons AWT, Swing, JavaFX & SWT 6
S JButtons Größe AWT, Swing, JavaFX & SWT 15
M JButtons immer gleiche Größe? AWT, Swing, JavaFX & SWT 8
H Unsichtbare JButtons? AWT, Swing, JavaFX & SWT 5
C JComboBox mit JButtons befüllen AWT, Swing, JavaFX & SWT 8
1 Warum sind JButtons viel breiter als der enthaltene Text ? AWT, Swing, JavaFX & SWT 4
S Text eines JButtons vertikal schreiben AWT, Swing, JavaFX & SWT 5
L-ectron-X Den Text eines JButtons unter das Icon setzen? AWT, Swing, JavaFX & SWT 2
M JButtons in JScrollPanel darstellen AWT, Swing, JavaFX & SWT 6
S JButtons in einem JPanel erscheinen nicht direkt AWT, Swing, JavaFX & SWT 7
G von JButtons erben, aber richtig! AWT, Swing, JavaFX & SWT 4
R JButtons werden nicht dargestellt AWT, Swing, JavaFX & SWT 7
G JButtons AWT, Swing, JavaFX & SWT 7
Z Problem mit Spielfläche aus JButtons AWT, Swing, JavaFX & SWT 2
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
G Icon eines JButtons ändern? AWT, Swing, JavaFX & SWT 7
M JButtons mit Linie verbinden AWT, Swing, JavaFX & SWT 4
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
S Ich bringe Code mit JavaFX unter Apache NetBeans IDE 12.6 nicht zum laufen. AWT, Swing, JavaFX & SWT 14
U Wie funktioniert das rotieren unter 2dGraphics, also wie stelle ich z. B. 90° ein? AWT, Swing, JavaFX & SWT 1
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
N JavaFX Installation unter IntelliJ IDEA AWT, Swing, JavaFX & SWT 5
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
B JavaFX openjfx11: intelliJ unter Ubuntu 18.10 kann nicht auflösen AWT, Swing, JavaFX & SWT 4
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
Blender3D Swing KeyBoardListener funktioniert nicht unter UBUNTU AWT, Swing, JavaFX & SWT 7
V Swing Button soll unter anderem Button sein AWT, Swing, JavaFX & SWT 2
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
L JavaFX Scene wechseln unter FX AWT, Swing, JavaFX & SWT 5
Avarion Swing JFrame unter Windows 10 kleiner ?! AWT, Swing, JavaFX & SWT 2
T ThreadPool sicher beenden unter Verwendung von swt.widgets.Display.syncExec AWT, Swing, JavaFX & SWT 1
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
M Swing Bildbearbeitung unter Java AWT, Swing, JavaFX & SWT 22
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6
D 2D-Grafik Rechteck befindet sich unter dem Rahmen des JFrame. AWT, Swing, JavaFX & SWT 1
T JFrame Icon unter Linux/Ubuntu AWT, Swing, JavaFX & SWT 11
S JMenu unter JPanel versteckt AWT, Swing, JavaFX & SWT 5
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
SexyPenny90 JLabel liegt unter meiner Turtle AWT, Swing, JavaFX & SWT 5
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
J AWT setBackground(Color.orange) ist unter Win7 Aero nicht orange AWT, Swing, JavaFX & SWT 3
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
R Problem mit TrayIcon unter Windows/Linux AWT, Swing, JavaFX & SWT 7
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
S GUI aussehen unter Windows und Linux (und Mac) AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben