Button Klasse mit allem drum und dran leider fehlt doch was ^^

Cem

Mitglied
Hallo alle zusammen

Ich sitze gerade vor einem Problem welches mich ein wenig verzweifeln lässt.

Ich Habe mir eine - so zu sagen abstrakte - Klasse gebaut die folgendes soll.

==> : - einen Button erstellen
- diesem Button soll gleich eine Position, Größe und Text zugeteilt werden
- ( so und nun kommt mein Prob ) er soll auch gleich einen ActionListener bekommen

das Ganze könnte ich jetzt natürlich so gestalten ^^

Hier die Klasse

Java:
class initJButtons extends JButton {

		/**
		 * the constructor of the initButtons class
		 * 
		 * @param xPos
		 * @param yPos
		 * @param width
		 * @param heigth
		 * @param text
		 * @param panel
		 */
		public initJButtons(int xPos, int yPos, int width, int heigth,
				String text, JPanel panel,ActionListener al ) {

			this.setBounds(xPos, yPos, width, heigth);
			this.addActionListener(al);
			this.setText(text);
			
			panel.add(this);

		}

	}

und hier der erstellende Konstruktor

Java:
public void initGuiStones(){
		
		buttonPanel = new initJPanels(1, 500, 600, 100, Color.BLACK);
		button = new initJButtons(1, 1, 100, 30, "click mich", buttonPanel, new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				
				if(e.getSource().equals(button)){
					System.out.println("hallo");
				}
				
				
			}
		});
	}

Nun ist mir das aber zu unsauber jedes mal 10 Zeilen oder mehr code extra zu haben in meiner Methode in der eigentlich nur Konstruktoren stehen sollten.
Denn das ganze sieht nach 10 Buttons, nicht mehr so Sauber aus wie am Anfang und ich verliere den Überblick ( was nebenbei gesagt auch der Grund war warum ich das so programieren will, denn es soll als Basis für weitere fenster Dienen )

Jetzt zu meiner Idee die noch nicht funktioniert

Ich schiebe den Code erstmal vor und erkläre hinterher mein Problem genauer :)

so sollte es so ungefair ausehen.

hier wieder die Buttonklasse, das wichtige ist hier der parameter initinitButtonListener bl
und die Zeile this.addButtonListener(bl);

Java:
class initJButtons extends JButton {

		/**
		 * the constructor of the initButtons class
		 * 
		 * @param xPos
		 * @param yPos
		 * @param width
		 * @param heigth
		 * @param text
		 * @param panel
		 */
		public initJButtons(int xPos, int yPos, int width, int heigth,
				String text, JPanel panel,initButtonListener bl ) {

			this.setBounds(xPos, yPos, width, heigth);
			
			this.addButtonListener(bl);
			
			this.setText(text);
			
			panel.add(this);

		}

	}

So und jetzt zu der initButtonListener Klasse die ich mir in etwa so vorgestellt habe

Java:
class initButtonListener {
		
		public initButtonListener(int i, final initJButtons button) {
			
			switch (i) {
			case 1:
				
				new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent e) {
						
						if(e.getSource().equals(button)){
							System.out.println("hallo");
						}		
					}
				};
				
				break;

			default:
                                     
                  System.out.println("This ActionListener doesn´t exist. Make sure you implement a new Actionlistener "); 

				break;
			}	
			
		}
			
	}

Ich weis jetzt aber nicht wie ich es in meiner erstellenden Methode so hinbekomme das alles Richtig ist und Funktioniert wie es soll

hier wieder die erstellende Methode, wie ich sie mir vorstelle


Java:
public void initGuiStones(){
		
		buttonPanel = new initJPanels(1, 500, 600, 100, Color.BLACK);
		button = new initJButtons(1, 1, 100, 30, "click mich", buttonPanel, new initButtonListener(1, button));
			
		
	}

Ich hoffe ich habe alles ausführlich genug beschrieben damit man es gleich verstehen kann

Danke schon einmal im vorraus

MfG Cem

P.S. wer Rechtschreibfehler findet, darf sie behalten :D
 

Michael...

Top Contributor
Was erwartetest Du denn, dass die Klasse initButtonListener (KlassenNamen schreibt man üblicherweise gross) machen soll?
Und was hast Du eigentlich vor?

Die Tatsache, dass Du Position und Grösse den Buttons übergibt's, lasst darauf schliessen, dass Du keinen LayoutManager verwendest, wovon ich eher abraten würde.
 

Cem

Mitglied
Also Klassennamen schreibt man immer Groß sry hab ich vergessen ^^ wird verbessert!

So das ist richtig, ich verwende keine L-Manager, weil ich bei meinen letzten programmen gemerkt habe das es einfach besser funktioniert ohne welche eingebaut zu haben. Übrigens beim verwenden eines drag an drop addons der Bausteine sind auch keine Layouts von nöten.

So was ich machen will ist einfach das ich, wenn ich einen neuen Button erstellen will, einfach eine neue Instanz meiner Klasse InitButton erstelle die mich, mit den Parametern zwingt die Position auf dem Panel zu bestimmen, die Größe zu bestimmen und auf welchem Panel er sein soll.
Das war der einfache Teil, jetzt will ich aber noch einen weiteren Parameter, der mich zwingt die Klasse InitButtonListener aufzurufen( mit ihrem Konstruktor ), die wiederrum den Parameter i und die Instanz des Buttons dem dieser AcL. zugewiesen werden soll, beinhaltet.

das i ist für die switch case Abfrage

Java:
class initButtonListener {
        
        public initButtonListener(int i, final initJButtons button) {
            
            switch (i) {
            case 1:
                
                new ActionListener() {
                    
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        
                        if(e.getSource().equals(button)){
                            System.out.println("hallo");
                        }       
                    }
                };
                
                break;
 
            default:
                                     
                  System.out.println("This ActionListener doesn´t exist. Make sure you implement a new Actionlistener "); 
 
                break;
            }   
            
        }
            
    }

Jetzt weis ich aber nicht wie ich meiner abstrakten Klasse InitJButton diesen Actionlistener über die Klasse InitButtonListener zuweisen kann den ich kann ja nicht einfach

Java:
public initJButtons(int xPos, int yPos, int width, int heigth,
                String text, JPanel panel, --> initButtonListener bl <-- ) {
.
.
.
   this.addButtonListener(bl);
.
.
.
}

Machen dazu fehlt mir die methode addButtonListener die das kann

Es ist wie wenn ich einen Button habe, dem ich über eine Zwischenklasse, einen Actionlistener zuweisen will.

So, ich hoffe ich hab es jetzt einigermaßen deutlich gemacht, wo mein Problem liegt, wenn nicht einfach reklamieren ;) nehme jede Kritik positiv auf, ich will ja was lernen :)

MfG Cem
 

Michael...

Top Contributor
Prinzipiell könnte man die Listener Klasse wie folgt gestalten, wobei Du eigentlich ja nur eine Methode benötigst.

Allerdings sollte man sich dieses Vorgehen überlegen.
- brauch jeder Button einen eigenen ActionListener oder kann man nicht einen für mehrere verwenden
- muss man so diverse anonyme ActionListener vorhalten
- so ganz verstanden habe ich auch nicht worum es Dir da geht. Geht's nur darum den Code übersichtlicher zu strukturieren? Das könnte auch ganz schnell das Gegenteil bewirken.

Java:
class initButtonListener {

	public initButtonListener(int i, final initJButtons button) {
		switch (i) {
		case 1:
			button.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					System.out.println("hallo");
				}
			});
			break;
		default:
			System.out.println("This ActionListener doesn´t exist. Make sure you implement a new Actionlistener ");
			break;
		}
	}
}
 

Cem

Mitglied
Ja ich könnte es auch mit einem ActionListener machen mit hilfe einer if - Abfrage nur hätte ich es gerne so das jeder button seinen eigenen Ac.L hat damit das ganze strukturierter aussieht ( ich zumindest finde es sieht so besser aus muss man nicht verstehen :D )

die Idee ist gut danke :) aber ich bekomme eine java.lang.NullPointerExeption in der Zeile

--> button.addActionlistener(new ActionListener...

Ich glaube das hängt mit meiner Klasse InitJButtons zusammen, da die ja nicht weis, was sie mit dem übergebenen Parameter anfangen soll

Java:
class InitJButtons extends JButton {

		/**
		 * the constructor of the initButtons class
		 * 
		 * @param xPos
		 * @param yPos
		 * @param width
		 * @param heigth
		 * @param text
		 * @param panel
		 */
		public initJButtons(int xPos, int yPos, int width, int heigth,
				String text, JPanel panel,initButtonListener bl ) {

			this.setBounds(xPos, yPos, width, heigth);
			this.setText(text);
			panel.add(this);

		}

	}

hier müsste doch dann auch noch etwas stehen wie this.addButtonListener(bl) oder ?

nur wie soll ich so etwas wie addButtonListener machen und was soll das sein eine Methode in InitButtonListener oder auch was ganz andres ?

MfG Cem und danke für die bisherige Hilfe :)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Naja button ist vermutlich null die Klasse initButtonListener passt ja nicht zu Deinem anderen Code.
Wenn überhaupt, dann würde ich keine Klasse sondern entsprechende Methoden zur Verfügung stellen (und diese eventuell in einer eigenen Klasse kapseln).
Eher so:
Java:
class Constructor extends JPanel {
	private JButton button2;

	public Constructor() {
		this.setLayout(null);
		this.add(createButton("Button1", 10, 10, 50, 26, 0));
		this.add(button2 = createButton("Button2", 10, 50, 50, 26, 1));
	}

	private JButton createButton(String text, int x, int y, int w, int h, int i) {
		JButton button = new JButton(text);
		button.setBounds(x, y, w, h);
		button.addActionListener(createActionListener(i));
		return button;
	}

	private ActionListener createActionListener(int index) {
		switch (index) {
		case 0:
			return new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					System.out.println(e.getSource());
				}
			};
		case 1:
			return new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					System.out.println(e.getActionCommand());
				}
			};
		}
		return null;
	}
}
 

Ebenius

Top Contributor
Ich möchte nur mal am Rande anmerken, dass mir die numerischen Identifizierer (also [c]index[/c]) als Referenz eher misfallen. Da wird der Code meiner Meinung nach eher unübersichtlicher als besser. Wenn man's so macht, sollte man doch eher Enums oder Strings nutzen, da kann man beim Lesen wenigstens was mit anfangen. In aller Regel sind solche [c]switch[/c]/[c]case[/c]-Anweisungen ein Indiz für unschönen Code:
Java:
switch(magicNumber) {
  case 0:
  case 1:
  case 2:
  case 3:
}

Just my $0.02
Ebenius
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
J Anonyme Klasse - Button ansprechen - Warum muss Button final sein? AWT, Swing, JavaFX & SWT 4
C Gedrückter Button in andere Klasse übergeben AWT, Swing, JavaFX & SWT 5
N Button on click eine andere Klasse aufrufen... AWT, Swing, JavaFX & SWT 2
M Swing Eine andere Klasse über Button starten und in TextArea ausgeben AWT, Swing, JavaFX & SWT 13
N Actionlistener auf Button in anderer Klasse AWT, Swing, JavaFX & SWT 4
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
G Button auswerten und ausgeben ob richtig oder falsch AWT, Swing, JavaFX & SWT 1
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
H Button / Design Ideen AWT, Swing, JavaFX & SWT 2
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
B JavaFX Sprachumschaltung mit Button auf der HMI AWT, Swing, JavaFX & SWT 6
T TableView Button onAction AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
J Button-Keyboard Interaktion AWT, Swing, JavaFX & SWT 7
EinNickname9 Swing Button mittig positionieren AWT, Swing, JavaFX & SWT 4
L actionListener für Button AWT, Swing, JavaFX & SWT 97
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
I JavaFX Hover-Effekt bei Button AWT, Swing, JavaFX & SWT 11
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
G Button Strings Effektiver setzen AWT, Swing, JavaFX & SWT 3
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
Z Button bewegen und Plätze tauschen AWT, Swing, JavaFX & SWT 4
Z Swing Button anklicken und bewegen AWT, Swing, JavaFX & SWT 2
K JavaFX Button verbinden AWT, Swing, JavaFX & SWT 6
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
M JavaFX Button action abhängigkeit von Tab AWT, Swing, JavaFX & SWT 1
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
L Button Funktion zuweisen in WindowBuilder AWT, Swing, JavaFX & SWT 22
A Button mit Speicher-Funktion AWT, Swing, JavaFX & SWT 8
krgewb Swing Icon von Button AWT, Swing, JavaFX & SWT 12
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
Ø Swing Button in anderer Klassen ausführen AWT, Swing, JavaFX & SWT 6
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
K JavaFX TextInputDialog Button Text ändern AWT, Swing, JavaFX & SWT 1
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
S GUI Schließen Button auf der linken Seite AWT, Swing, JavaFX & SWT 2
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
E Button verschwindet nachdem ein Rechteck gezeichnet wurde AWT, Swing, JavaFX & SWT 5
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
I JavaFX: "globaler Button" AWT, Swing, JavaFX & SWT 0
M JavaFX ActionEvent Button AWT, Swing, JavaFX & SWT 6
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
B FXML GUI - Button ausblenden AWT, Swing, JavaFX & SWT 1
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
L Suchergebnisse variabel mit Button anzeigen lassen AWT, Swing, JavaFX & SWT 3
J Event Handling Button "enablen" wenn Eingaben in Textfeldern korrekt sind AWT, Swing, JavaFX & SWT 1
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
T JavaFX Button als Runnable AWT, Swing, JavaFX & SWT 4
OlafHD JPasswordField mit Button eingeben AWT, Swing, JavaFX & SWT 4
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
D JavaFX Button Links- und Rechtsklick? AWT, Swing, JavaFX & SWT 1
Thallius Button von JDatePicker customizen? AWT, Swing, JavaFX & SWT 0
K eigener button in swing AWT, Swing, JavaFX & SWT 3
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
R Button Aktion AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben