G
Gelöschtes Mitglied 36296
Gast
Hallo zusammen,
ich habe ein kleines Problem.
Ich habe ein JFrame in dem 3 Spalten sind (siehe 1. Foto).
Mit dem New-Button wird das Fenster um eine Zeile erweitert (siehe 2.Foto)
jetzt hätte ich gerne, dass die beiden Buttons (Rename und Delete) der neuen Zeile, erst nachdem der name in das textfeld eingegeben und mit enter bestätigt wurde, registriert werden. Der Grund ist, dass ich die Buttons (da sich die Anzahl verändern können muss) in einer LinkedList habe. Da ich den Index, wo die Buttons dann angehängt werden nicht kenne, muss ich mit getLast() darauf zugreifen. Daher dürfen die Buttons erst nach dem ENTER-Drücken registriert werden, da sonst die Buttons eine stelle davor erneut registriert werden, was ich nicht brauche.
Hier noch ein wenig Quellcode:
Im dritten Bild sieht man, dass nachdem der Name mit enter bestätigt wurde, die beiden Buttons (Rename und Delete) dahinter auftauchen, nur leider ohne beim ActionListener registriert zu sein...
Wäre es eventuell möglich das registrieren unten in der actionPerformed(..) zu machen und es irgendwie so zu machen, dass die actionPerformed(..) quasi auf das ende der keyPressed(..)-Methode wartet?
BTW:
Vielleicht kann mir auch noch jemand sagen, ob es eine bessere Variante gibt, heruszufinden, welcher Button gedrückt wurde (letzerer Teil in der actionPerformed). (Die Rename-Buttons, die Delete-Buttons und die Labels sind in jeweils einer eigenen LinkedList)
Danke schon mal
Boldi
ich habe ein kleines Problem.
Ich habe ein JFrame in dem 3 Spalten sind (siehe 1. Foto).
Mit dem New-Button wird das Fenster um eine Zeile erweitert (siehe 2.Foto)
jetzt hätte ich gerne, dass die beiden Buttons (Rename und Delete) der neuen Zeile, erst nachdem der name in das textfeld eingegeben und mit enter bestätigt wurde, registriert werden. Der Grund ist, dass ich die Buttons (da sich die Anzahl verändern können muss) in einer LinkedList habe. Da ich den Index, wo die Buttons dann angehängt werden nicht kenne, muss ich mit getLast() darauf zugreifen. Daher dürfen die Buttons erst nach dem ENTER-Drücken registriert werden, da sonst die Buttons eine stelle davor erneut registriert werden, was ich nicht brauche.
Hier noch ein wenig Quellcode:
Java:
private void buttonRegister() {
ok_button.addActionListener(this);
cancel_button.addActionListener(this);
new_button.addActionListener(this);
newFund_textfield.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
Object o = e.getKeyCode();
if (o.equals(KeyEvent.VK_ENTER)) {
String s = newFund_textfield.getText();
rename_delete_panel.remove(newFund_textfield);
labels.add(new JLabel(s));
rename_delete_panel.add(labels.getLast());
rename_buttons.add(new JButton("Rename"));
rename_delete_panel.add(rename_buttons.getLast());
delete_buttons.add(new JButton("Delete"));
rename_delete_panel.add(delete_buttons.getLast());
delete_buttons.getLast().addActionListener(this);//<--
rename_buttons.getLast().addActionListener(this);//<--
//Die beiden vorherigen Zeilen mag er nicht, da er das "this" dann nicht kennt...
//Das ist mein Problem, das es zu lösen gilt... ;)
repaint();
pack();
}
}
});
...
@Override
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o.equals(ok_button)) {
dispose();
} else if (o.equals(new_button)) {
rename_delete_panel.add(newFund_textfield);
newFund_textfield.setText("new Name");
newFund_textfield.selectAll();
newFund_textfield.updateUI();
} else if (o.equals(cancel_button)) {
dispose();
} else {
for (int i = 0; i < labels.size(); i++) {
if (o.equals(rename_buttons.get(i))) {
rename.setTextFieldText(labels.get(i).getText());
rename.setVisible(true);
index = i;
break;
} else if (o.equals(delete_buttons.get(i))) {
rename_delete_panel.remove(labels.get(i));
rename_delete_panel.remove(rename_buttons.get(i));
rename_delete_panel.remove(delete_buttons.get(i));
rename_buttons.remove(i);
delete_buttons.remove(i);
labels.remove(i);
break;
}
}
}
repaint();
pack();
}
Im dritten Bild sieht man, dass nachdem der Name mit enter bestätigt wurde, die beiden Buttons (Rename und Delete) dahinter auftauchen, nur leider ohne beim ActionListener registriert zu sein...
Wäre es eventuell möglich das registrieren unten in der actionPerformed(..) zu machen und es irgendwie so zu machen, dass die actionPerformed(..) quasi auf das ende der keyPressed(..)-Methode wartet?
BTW:
Vielleicht kann mir auch noch jemand sagen, ob es eine bessere Variante gibt, heruszufinden, welcher Button gedrückt wurde (letzerer Teil in der actionPerformed). (Die Rename-Buttons, die Delete-Buttons und die Labels sind in jeweils einer eigenen LinkedList)
Danke schon mal
Boldi
Anhänge
Zuletzt bearbeitet von einem Moderator: