簡體   English   中英

在Swing中向模型添加元素后,JList不會更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM