如何在Swing中将数据传输到JList?

时间:2014-09-09 07:23:38

标签: java swing oop object jlist

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

但我不能做最后一部分。我能做什么?我知道它与物体有关,但我不知道该怎么做。我听说我必须创建一个对象,并将客户端填充的数据传输到对象,然后从对象发送到列表。

重点是我不知道我必须使用哪个监听器列表。

2 个答案:

答案 0 :(得分:1)

一种方法是跟随JOptionPane,它只有一个静态方法,在调用时返回一个值(和“阻止”父帧交互)。

  1. 创建JPanel,说NameInputPane。在那里制作ui视图。
  2. 在该面板static中设置一个showInputDialog(...)方法,该方法返回您希望对话框返回的内容,例如User个对象或只是一个简单的String[] ..您。同样在方法中,您可以创建JDialog。当用户点击提交或关闭窗口时,返回值。
  3. 这样做是将责任分开。该对话框只是获取信息,并返回该信息。主应用程序(框架)负责决定如何处理该信息。 (即将其添加到列表中)

    有许多不同的方法可以处理这个任务,但是短期窗口的一般规则(例如,仅用于获取输入)是使用modal对话框,而不是框架。

答案 1 :(得分:0)

也许这可以帮到你。以下代码创建了一个主框架,其中包含JListJButton。如果单击按钮,将显示Client-Frame,您可以修改名称(在JList中)。

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

image

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);
    }
}