V
Vane
Gast
Hallo, ich sollte eine kleine Anwendung in Java mit Swing Komponenten programmieren, es ist eine aufgabe von unserem Professor. Nun habe ich es soweit alles doch ich wollte es etwas optimieren:
Also ich habe eine eigene Klasse die ich von JFrame abgeleitet habe. Dort hänge ich dem Fenster 3 Komponenten an eine JComboBox und 2 JPanel.
Die Ausrichtung ist ComboBox oben 1 Panel in der mitte das zweite unten (BorderLayout, North, Center, South).
Das Panel in der Mitte enthält ein Säulendiagramm, dazu hat er einen keyListener das wenn ich + oder - drücke die Säulen minimiert oder maximiert. Die Methoden befinden sich dazu in dem Säulendiagramm. Nun wollte ich das die ComboBox einen Listener auf das Säulendiagramm (JPanel) erhätl so das wenn sich was verändert das die ComboBox drauf reagiert.
Dazu habe ich die methode firePropertyChange() diese feuert halt ein event wenn die Methode zum maximieren oder minimieren ausgeführt wird um die Säulen zu verändern.
Nun habe ich in der abgeleiteten Klasse von JFrame wo die Panels und die ComboBox angebunden sind, der ComboBox besser gesagt derer Instanz via addProbertyChangeListener ein ProbertyChangeListener angehängt via anonyme Klasse.
und zum test einfach mal nur ne system.out.println gemacht zum überprüfen ob überhaupt was angezeigt wird aber nein nicht. Warum fängt der Listener der an der ComboBox drangehängt ist das Event nicht?
Wenn ich aber den Listener an die Instanz des Säulendiagramms hänge dann geht das.....?
Ich gebe euch mal etwas Code vielleicht findet ihr ja was:
Die abgeleitete JFrame Klasse:
und hier einmal die Methode zum maximieren aus der vom Jpanel abgeleiteten Klasse Säulendiagramm:
Also ich habe eine eigene Klasse die ich von JFrame abgeleitet habe. Dort hänge ich dem Fenster 3 Komponenten an eine JComboBox und 2 JPanel.
Die Ausrichtung ist ComboBox oben 1 Panel in der mitte das zweite unten (BorderLayout, North, Center, South).
Das Panel in der Mitte enthält ein Säulendiagramm, dazu hat er einen keyListener das wenn ich + oder - drücke die Säulen minimiert oder maximiert. Die Methoden befinden sich dazu in dem Säulendiagramm. Nun wollte ich das die ComboBox einen Listener auf das Säulendiagramm (JPanel) erhätl so das wenn sich was verändert das die ComboBox drauf reagiert.
Dazu habe ich die methode firePropertyChange() diese feuert halt ein event wenn die Methode zum maximieren oder minimieren ausgeführt wird um die Säulen zu verändern.
Nun habe ich in der abgeleiteten Klasse von JFrame wo die Panels und die ComboBox angebunden sind, der ComboBox besser gesagt derer Instanz via addProbertyChangeListener ein ProbertyChangeListener angehängt via anonyme Klasse.
und zum test einfach mal nur ne system.out.println gemacht zum überprüfen ob überhaupt was angezeigt wird aber nein nicht. Warum fängt der Listener der an der ComboBox drangehängt ist das Event nicht?
Wenn ich aber den Listener an die Instanz des Säulendiagramms hänge dann geht das.....?
Ich gebe euch mal etwas Code vielleicht findet ihr ja was:
Die abgeleitete JFrame Klasse:
Code:
public class Dialogbox extends JFrame{
JComboBox auswahl = new JComboBox();
Diagramm diagramm = new Diagramm();
Funktion funktion = new Funktion();
Dialogbox(){
super();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("Dialogbox");
this.setBounds(200,300,400,350);
auswahl.addItem("Säule 1");
auswahl.addItem("Säule 2");
auswahl.addItem("Säule 3");
auswahl.addItem("Säule 4");
auswahl.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt.getNewValue());
}
});
auswahl.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("Command: " + actionEvent.getActionCommand());
System.out.println(actionEvent.toString().contains("Säule 1"));
if(actionEvent.toString().contains("Säule 1") != false) {
diagramm.setBalken(1);
diagramm.grabFocus();
}
if(actionEvent.toString().contains("Säule 2") != false) {
diagramm.setBalken(2);
diagramm.grabFocus();
}
if(actionEvent.toString().contains("Säule 3") != false) {
diagramm.setBalken(3);
diagramm.grabFocus();
}
if(actionEvent.toString().contains("Säule 4") != false) {
diagramm.setBalken(4);
diagramm.grabFocus();
}
}
});
this.getContentPane().add(auswahl, BorderLayout.NORTH);
this.getContentPane().add(diagramm);
this.getContentPane().add(funktion, BorderLayout.SOUTH);
diagramm.funk = funktion;
}
public static void main(String[] args) {
Dialogbox dialog = new Dialogbox();
dialog.setVisible(true);
}
}
und hier einmal die Methode zum maximieren aus der vom Jpanel abgeleiteten Klasse Säulendiagramm:
Code:
public void wachsen(){
int zaehler = 0;
int dekrement = 0;
if(balken[search()].getHoehe() < 200) {
zaehler = balken[search()].getHoehe();
zaehler = zaehler + 2;
dekrement = balken[search()].getYKo();
dekrement = dekrement - 2;
balken[search()].setBounds(balken[search()].getXKo(), dekrement,
balken[search()].getBreite(), zaehler);
firePropertyChange("wachsen", (zaehler - 2) / 2, zaehler / 2);
}
}