Hallo!
Ich habe mich gerade gefragt für was bzw. wann man eine AbstractAction benutzt?
Sinn dieser Klasse ist ja wohl einerseits das wenn ein Button gedrückt wird die
actionPerformed Methode aufgerufen wird. Hier macht ja auch der Name "AbstractAction" sinn.
Jetzt geht das ganze aber weiter und die Eigenschaften meiner Buttons über dieses Objekt eingestellt.
D.h. der Text sowie enabled/disabled werden über das AbstractAciton Objekt geändert.
Jetzt sollen meine Buttons noch mehr machen - nämlich die Hintergrundfarbe rot/grün und blau annehmen -
Also hab ich meine AbstractAction erweitert und schicke ihr einen Event aufgrund dem sie jetzt dem Button
eine neue Farbe verleiht.
Meine Frage: Verwende ich die AbstractAction hier so richtig? Oder ist das Konzept der AbstractAction nur auf Menü/Schaltflächen ausgerichtet und ich hätte mir eine extra Klasse einreichten sollen die die Changes abfängt und von dort aus meinen Button verändern?
Ich habe mich gerade gefragt für was bzw. wann man eine AbstractAction benutzt?
Sinn dieser Klasse ist ja wohl einerseits das wenn ein Button gedrückt wird die
actionPerformed Methode aufgerufen wird. Hier macht ja auch der Name "AbstractAction" sinn.
Jetzt geht das ganze aber weiter und die Eigenschaften meiner Buttons über dieses Objekt eingestellt.
D.h. der Text sowie enabled/disabled werden über das AbstractAciton Objekt geändert.
Jetzt sollen meine Buttons noch mehr machen - nämlich die Hintergrundfarbe rot/grün und blau annehmen -
Also hab ich meine AbstractAction erweitert und schicke ihr einen Event aufgrund dem sie jetzt dem Button
eine neue Farbe verleiht.
Meine Frage: Verwende ich die AbstractAction hier so richtig? Oder ist das Konzept der AbstractAction nur auf Menü/Schaltflächen ausgerichtet und ich hätte mir eine extra Klasse einreichten sollen die die Changes abfängt und von dort aus meinen Button verändern?
Code:
public class PotentialAction extends AbstractAction implements ChangeListener {
private static final Color yellow = new Color(235, 235, 100);
private static final Color green = new Color(100, 235, 100);
private static final Color dark_grey = new Color(159, 154, 167);
private static final Color grey = Color.lightGray;
private static final Color red = new Color(235, 100, 100);
private static final long serialVersionUID = 1L;
Potential potential;
JButton button;
public PotentialAction(Potential potential, JButton button) {
super();
this.potential = potential;
this.button = button;
setValues();
}
public void actionPerformed(ActionEvent e) {
potential.showPotentialDetails();
}
public void stateChanged(ChangeEvent e) {
setValues();
}
private void setValues() {
this.setEnabled(potential.getEnabled());
this.putValue(NAME, getName());
if (!isEnabled()) {
button.setForeground(Color.GRAY);
}
if (potential.haveSPF()) {
float spf = potential.getSPF().floatValue();
if (spf >= 3.0f) {
button.setBackground(red);
} else if (spf >= 2.0f) {
button.setBackground(yellow);
} else {
button.setBackground(green);
}
} else {
button.setBackground(dark_grey);
}
}
private String getName() {
String text = "<html><center>" + potential.getDescr() + "
";
if (potential.getEnabled()) {
text += "<center>" + potential.getSPF() + "</html>";
}
return text;
}