我在Swing中更新JList小部件时遇到了麻烦。
我正在创建一个模型,向其添加元素,然后将其设置为JList元素的模型。一切正常,它显示正确。
问题是我想在模型中添加元素。它没有做任何事情。
在从Observer模式更新后,我正在动态添加元素。
我做错了什么?
以下是用户界面的代码。
// 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");
}
}
答案 0 :(得分:0)
问题必须是布局(你没有看到实际发生的变化),或者是在这个问题上的其他地方。这是一个可以向您展示的工作示例,当向列表中添加新元素时可能不可见(由于元素大小限制或实际大小)。
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 - 在版本&lt; 8 environements中使用匿名ActionListener
扩展类)