我在应用程序中有2个帧。在第一个中,我有一个JList
和一个JButton
。通过单击按钮,第二帧打开,客户端应填写表单,如姓名和姓氏。通过单击提交,名称和系列名称应该在列表中(在第一帧中)。
但我不能做最后一部分。我能做什么?我知道它与物体有关,但我不知道该怎么做。我听说我必须创建一个对象,并将客户端填充的数据传输到对象,然后从对象发送到列表。
重点是我不知道我必须使用哪个监听器列表。
答案 0 :(得分:1)
一种方法是跟随JOptionPane
,它只有一个静态方法,在调用时返回一个值(和“阻止”父帧交互)。
JPanel
,说NameInputPane
。在那里制作ui视图。static
中设置一个showInputDialog(...)
方法,该方法返回您希望对话框返回的内容,例如User
个对象或只是一个简单的String[]
..您。同样在方法中,您可以创建JDialog
。当用户点击提交或关闭窗口时,返回值。 这样做是将责任分开。该对话框只是获取信息,并返回该信息。主应用程序(框架)负责决定如何处理该信息。 (即将其添加到列表中)
JOptionPane.showInputDialog()
的源代码。有许多不同的方法可以处理这个任务,但是短期窗口的一般规则(例如,仅用于获取输入)是使用modal对话框,而不是框架。
答案 1 :(得分:0)
也许这可以帮到你。以下代码创建了一个主框架,其中包含JList
和JButton
。如果单击按钮,将显示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);
}
}