![](/img/trans.png)
[英]JscrollPane doesn't update when changing JList model (Java swing)
[英]JList doesn't update after adding elements to the Model in Swing
我在更新Swing中的JList小部件時遇到麻煩。
我正在創建一個模型,向其中添加元素,然后將其設置為JList元素的模型。 一切正常,顯示正確。
問題是當我想向模型添加元素時。 它什么也沒做。
觸發觀察者模式的更新后,我正在動態添加元素。
我究竟做錯了什么 ?
這是UI的代碼。
// all the imports
public class View extends JPanel implements Observer{
private vivo vivox;
private Label label = new Label("Hola Mundo");
private DefaultListModel modelo = new DefaultListModel();
private JList nameList = new JList(modelo);
public View() {
super();
nameList.setFont(new Font("Arial",Font.BOLD,40));
this.setLayout(new GridLayout());
JButton button = new JButton("New Time");
JButton button1 = new JButton("New Time2");
label.setFont(new Font("Serif", Font.PLAIN, 50));
JPanel group = new JPanel( new GridLayout());
group.add(button);
group.add(button1);
JPanel east = new JPanel( new BorderLayout() );
east.add(label, BorderLayout.NORTH);
east.add(nameList, BorderLayout.CENTER);
east.add(group, BorderLayout.SOUTH);
add(east, BorderLayout.EAST);
vivox = new vivo();
vivox.addObserver(this);
this.setListElements();
}
public void setListElements() {
this.modelo.addElement("Messi");
this.modelo.addElement("CR7");
this.modelo.addElement("Iniesta");
}
@Override
public void update(Observable o, Object arg) {
this.label.setText("Some changes");
this.modelo.addElement("Maradona");
}
}
問題可能出在布局上(您看不到實際發生的更改),還是在其他地方(應進行此工作)。 這是可以向您展示的工作示例,當向列表添加新元素時可能不可見(由於元素大小限制或實際大小)。
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
DefaultListModel<String> model = new DefaultListModel<>();
for (int i = 0; i < 5; i++) {
model.addElement(String.valueOf(Math.random()));
}
JList list = new JList(model);
JButton button = new JButton("Click me!");
button.addActionListener(e -> model.addElement(String.valueOf(Math.random())));
frame.add(list);
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
就這么簡單。 請注意,當添加幾個元素時,您將看不到更改,因為它們超出了框架,因此您必須調整其大小。 我認為您可能遇到類似問題,或者根本沒有調用更新代碼。
PS:這是Java 8示例(使用的lambda-在版本<8環境中使用匿名ActionListener
擴展類)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.