在Java中,我有2个类。一个包含JFrame。在启动时,该类被调用。 JFrame显示。
但是在另一个类中,当我按下它自己的框架上的一个按钮时,它会打开该类的 new 实例,它应该创建另一个框架。但它只关注已经打开的旧框架......
来源:
FrameToOpen.java
public FrameToOpen() {
JFrame frame = new JFrame();
// Just the most simple settings to make it appear...
frame.setSize(400, 200);
frame.setVisible(true);
}
OtherClass.java
public OtherClass() {
JFrame frame = new JFrame();
JPanel window = new JPanel();
JButton openFrame = new JButton("Open Frame);
// Again, just the most simple settings to make it appear with components...
frame.setSize(400, 200);
frame.setVisible(true);
frame.add(window);
window.setLayout(null);
window.add(openFrame);
openFrame.setBounds(5, 5, 100, 30);
openFrame.addActionListener(this);
frame.repaint();
frame.validate();
}
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o == openFrame) {
// THIS HERE MAKES NEW INSTANCE OF FRAMETOOPEN
new FrameToOpen();
}
}
所以,当我按下这个按钮时,它不会打开一个新的框架,而是只关注旧框架。
请帮忙。
'实际'课程
ServerGUI.java
if (o == openAdmin) {
int port;
try {
port = Integer.parseInt(portNumber.getText().trim());
} catch(Exception er) {
appendEvent("Invalid Port Number.");
return;
}
// FrameToOpen.java. Opening a new instance of that class...
new ClientGUI("localhost", port, true);
}
ClientGUI.java
static JFrame frame = new JFrame("Chat Client");
Dimension d = new Dimension(600, 600);
JMenuBar menu = new JMenuBar();
public ClientGUI(String host, int port, boolean isHost) {
this.isHost = isHost;
frame.setSize(d);
frame.setMinimumSize(d);
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setJMenuBar(menu);
frame.setVisible(true);
// Everything else in the class is my buttons, lists, editor panes,
// and socket handling...
}
答案 0 :(得分:4)
您将框架变量定义为static
:
static JFrame frame = new JFrame("Chat Client");
因此无论创建了多少个实例,它都只为该类创建一次。如果您想将其作为实例字段,请删除static
修饰符。