【问题标题】:JList not updating on JButton pressJList 未在 JButton 按下时更新
【发布时间】:2013-12-23 16:25:09
【问题描述】:

我试图在按下按钮时获取输入到 JTextField 中的内容,然后将其存储在一个字符串中,然后我用它来更新我的 JList。唯一的问题是当我按下按钮时没有任何反应,但我尝试的测试文本看起来非常好。谁有想法?干杯。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Stack;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;


public class MainPanel {
    JList list;
    JTextField pushTextEntry;
    Stack lifoStack = new Stack();
    String pushTextListener;
    Boolean b = false;
    String a;

    JComponent mainPanel(final JFrame newFrame) throws IOException {


        ////////////////////////////////////////////////////////////
        final GridBagConstraints gbLayout = new GridBagConstraints();
        final JComponent panel = new JLabel();
        panel.setLayout(new GridBagLayout());

        gbLayout.weightx = 1.0;
        gbLayout.weighty = 1.0;
        gbLayout.gridx = 1;
        gbLayout.gridy = 1;
        gbLayout.anchor = GridBagConstraints.SOUTHEAST;

        gbLayout.insets = new Insets(15,15,215,45); 
        JButton Push = new JButton("Push");
        panel.add(Push, gbLayout);

        pushTextEntry = new JTextField(5);
        gbLayout.insets = new Insets(15,15,215,120);    
        panel.add(pushTextEntry,gbLayout);

        gbLayout.insets = new Insets(15,15,130,45);
        JButton Pop = new JButton("  Pop  ");
        panel.add(Pop, gbLayout);

        gbLayout.insets = new Insets(15,15,40,45);
        JButton Reset = new JButton("Reset");
        panel.add(Reset, gbLayout);
        ////////////////////////////////////////////////////////////

        Push.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                 for (int i = 1; i <= 10; i++)
                    {     
                        pushTextListener = pushTextEntry.getText();

                        lifoStack.add(pushTextListener);
                    }
            }
        });

        String listData[] = {
                "test",
                pushTextListener
        };

        list = new JList(listData);
        gbLayout.insets = new Insets(60,15,160,140);
        panel.add(list,gbLayout);

        return panel;
    }

}

【问题讨论】:

    标签: java swing jbutton jtextfield jlist


    【解决方案1】:

    您应该使用DefaultListModel 来更新数据。 ListModel 将在其更改时通知JListJList 将自动更新。

    final DefaultListModel listModel = new DefaultListModel();
    listModel.addElement("test");
    list = new JList(listModel);
    
    Push.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            for (int i = 1; i <= 10; i++) {
                pushTextListener = pushTextEntry.getText();
                listModel.addElement(pushTextListener);
            }
        }
    });
    

    【讨论】:

    • +1 仅用于更改模型。此外,请阅读 How to Use Lists 上的 Swing 教程中的部分以获取更多信息。 ListDemo 的示例代码完全符合您的要求。教程应该是您在使用 Swing 组件时寻求帮助的第一个地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2017-05-10
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2014-04-23
    • 2011-10-12
    相关资源
    最近更新 更多