所以基本上我用Java制作Swing应用程序,我有一个列表,用户可以通过键入文本字段和按钮来添加项目(当用户点击该按钮,窗口处理并打开新窗口时)。在新窗口我只有按钮,将驱动我回到第一个窗口,但数据插入列表删除。有没有办法避免这种情况(我知道有,但如果有人能解释我会怎么样:))。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class first extends JFrame {
public static final long serialVersionUID = 1L;
private JFrame frame;
private JButton button, button2;
private JComboBox box;
private JScrollPane scroll;
private DefaultListModel defListModel = new DefaultListModel();
private JList list;
private JPanel panel;
private JTextField field;
public First() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
e.printStackTrace();
}
frame = new JFrame("Hello Eclipse");
panel = new JPanel();
field = new JTextField("", 25);
panel.add(field);
button = new JButton("Click to add to the list");
button.setFocusPainted(false);
button.setToolTipText("Hovered Over ME");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button){
String text = field.getText();
defListModel.addElement(text);
JOptionPane.showMessageDialog(frame, "Added to the list", "Done", JOptionPane.INFORMATION_MESSAGE);
}
}
});
panel.add(button);
button2 = new JButton("New Window");
button2.setFocusPainted(false);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button2){
NewWindow window = new NewWindow();
frame.setVisible(false);
}
}
});
panel.add(button2);
String[] movies = {};
for(String movie : movies){
defListModel.addElement(movie);
}
list = new JList(defListModel);
list.setFixedCellWidth(150);
list.setFixedCellHeight(30);
scroll = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(scroll);
frame.add(panel);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setLocationRelativeTo(null);
}
public static void main(String[] args) {
new First();
}
}
提前致谢!
答案 0 :(得分:3)
您可以使用CardLayout为多个视图使用相同的空间。
提示:点击任何JPanel
时,只需在多个JButton
之间切换。
如果您想坚持使用当前的方法,请尝试使用WindowListener
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowDeactivated(WindowEvent arg0) {
System.out.println("windowDeactivated");
// save the data
}
});
如果需要,也可以覆盖windowClosing()
方法。
您也可以覆盖setVisible()
的{{1}}方法,以检查JFrame
的可见性。
请参阅The Use of Multiple JFrames, Good/Bad Practice?
怀疑:为什么同时使用扩展JFrame
类在类中添加JFrame
个实例?