【问题标题】:How to transfer data into a JList in Swing? [closed]如何在 Swing 中将数据传输到 JList? [关闭]
【发布时间】:2014-09-09 07:23:37
【问题描述】:

我在一个应用程序中有 2 个框架。在第一个中,我有一个JList 和一个JButton。通过单击按钮,第二个框架打开,客户应填写表格,如姓名和姓氏。通过单击提交,姓名和姓氏应出现在列表中(在第一帧中)。

但我不能做最后一部分。我能做些什么?我知道它与对象有关,但我不知道该怎么做。听说要创建一个对象,把客户端填写的数据传给对象,再从对象发送到列表。

关键是我不知道我必须为列表使用哪个监听器。

【问题讨论】:

  • “关键是我不知道我必须为列表使用哪个监听器。” 您不需要向列表中添加任何监听器。如果将新信息添加到列表 model 中,它将出现在列表中。
  • By clicking submit, the name and family name should go in the list - 不要使用 JList 来显示多列数据。相反,您应该使用JTable

标签: java swing oop object jlist


【解决方案1】:

一种方法是效仿JOptionPane,它只有一个静态方法,在调用时会返回一个值(并“阻止”父框架交互)。

  1. 创建一个JPanel,比如NameInputPane。在那里制作 ui 视图。
  2. 在该面板showInputDialog(...) 中有一个static 方法,它返回您希望对话框返回的任何内容,例如User 对象或只是一个简单的String[].. 由您决定。同样在您创建JDialog 的方法中。当用户点击提交或关闭窗口时,返回值。

这样做是分离职责。该对话框只是为了获取信息并返回该信息。主应用程序(框架)负责决定如何处理该信息。 (即将它添加到列表中)

您可以通过多种不同的方式来处理此任务,但短期窗口(例如,仅用于获取输入)的一般规则是使用modal 对话框,而不是框架。

【讨论】:

    【解决方案2】:

    也许这可以帮助你。下面的代码创建了一个带有JListJButton 的Main-Frame。如果您单击该按钮,则会出现一个 Client-Frame,您可以修改名称(JList)。

    您只需要处理相同的数据对象(模型)...

    public class TransferDataTest {
    
        public static void main(String[] args) {
            new TransferDataTest();
        }
        public TransferDataTest() {
            new MainFrame();
        }
    }
    public class MainFrame extends JFrame {
    
        public MainFrame() {
            super("Main");
            setLayout(new BorderLayout(4, 4));
    
            // Create a model which you can use for communication between frames
            final DefaultListModel<String> model = new DefaultListModel<>();
            model.addElement("Mike");
            model.addElement("Smith");
    
            JList list = new JList(model);
            getContentPane().add(list, BorderLayout.CENTER);
    
            JButton b = new JButton("Change...");
            b.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // Pass over your model so the client will can modify the data
                    new ClientFrame(model);
                }
            });
            getContentPane().add(b, BorderLayout.SOUTH);
    
            pack();
            setVisible(true);
        }
    }
    
    public class ClientFrame extends JFrame {
    
        public ClientFrame(final DefaultListModel<String> model) {
            super("Client");
            setLayout(new BorderLayout());
    
            // Init the GUI with data from the model
            final JTextField tfFirstName = new JTextField(model.get(0));
            final JTextField tfLastiName = new JTextField(model.get(1));
            JButton submit = new JButton("Submit");
            submit.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // On submit click update the model with data from the GUI
                    model.set(0, tfFirstName.getText());
                    model.set(1, tfLastiName.getText());
                }
            });
    
            getContentPane().add(tfFirstName, BorderLayout.NORTH);
            getContentPane().add(tfLastiName, BorderLayout.CENTER);
            getContentPane().add(submit, BorderLayout.SOUTH);
    
            pack();
            setLocationRelativeTo(null);
            setVisible(true);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多