Do kodu z książki Thinking in Java dodałem przycisk do usuwania elementów z rozwijanej listy (JComboBox), a wygląda to tak:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JApplet{
private String[] opis = {
"Rozentuzjazmowany", "Ograniczony", "Krnabrny", "Blyskotliwy",
"Samolubny", "Niesmialy", "Zdrowy", "Zgnily"
};
private JTextField t = new JTextField(15);
private JComboBox c = new JComboBox();
private JButton b = new JButton("Dodaj elementy"),
b2 = new JButton("Usun 0 element");
private int count = 0;
public void init(){
for(int i = 0;i<4;i++){
c.addItem(opis[count++]);
}
t.setEditable(false);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(count<opis.length)
c.addItem(opis[count++]);
}
});
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
c.removeItemAt(0);
}
});
c.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
validate();
t.setText("Indeks: "+ c.getSelectedIndex() + " " + ((JComboBox)e.getSource()).getSelectedItem());
}
});
//reszta kodu do uruchamiania programu - standardowa
Problem jest z wyświetlaniem tekstu. Gdy przełącza się między elementami listy to wszystko jest dobrze, lecz gdy kliknie się przycisk i usunie się pierwszy element z listy (Indeks: 0) to faktycznie on się usuwa, reszta elementów się przesuwa do góry lecz w polu tekstowym pojawia się: "Indeks: 1 Ograniczony", a przecież po usunięciu elementu: "Rozentuzjazmowany", element "Ograniczony" ma już Indeks: 0, a wyświetla, że 1. Gdy rozwinie się listę i kliknie na pierwszy element to pole tekstowe się odświeża i już wyświetla prawidłowo: Indeks: 0 Ograniczony. Lecz co zrobić by wyświetlał tak od razu po usunięciu elementu? Dopisałem przed wyświetlanie tekstu: validate(); bo to podobno od odświeżania całej ramki ale to nic nie dało.