我目前正在研究Java
以改善自己。我有一个程序,它有一个主窗口,菜单和子菜单。
当我点击我的子菜单时,我还有其他窗口。
其中一个是setRates,它是
public SetMyRates(){
JPanel dataPanel = new JPanel(new GridLayout(2, 2, 12, 6));
dataPanel.add(setTLLabel);
dataPanel.add(setDollarsLabel);
dataPanel.add(setTLField);
dataPanel.add(setDollarsField);
JPanel buttonPanel = new JPanel();
buttonPanel.add(closeButton);
buttonPanel.add(setTLButton);
buttonPanel.add(setDollarsButton);
Container container = this.getContentPane();
container.add(dataPanel, BorderLayout.CENTER);
container.add(buttonPanel, BorderLayout.SOUTH);
setTLButton.addActionListener(new SetTL());
setDollarsButton.addActionListener(new SetDollars());
closeButton.addActionListener(new closeFrame());
dataPanel.setVisible(true);
pack();
}
我希望在点击closeButton
时关闭该窗口。
我为closeButton创建了一个类,actionListener是:
private class closeFrame implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
dispose();
}
catch(Exception ex){
JOptionPane.showMessageDialog(null, "Please enter correct Rate.");
}
}
}
但是当我点击该按钮时,它会关闭我的主窗口而不是我的子窗口窗口。我该怎么做才能解决问题?
答案 0 :(得分:6)
您需要获取要关闭的窗口的引用,并直接在该引用上调用dispose()
。如何执行此操作取决于您的计划的详细信息 - 我们目前不知情的信息。
编辑:获取该引用的一种方法是通过SwingUtilities.getWindowAncestor(...)
。传入从ActionEvent对象返回的JButton引用,并在其上调用dispose。有点像...
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o instanceof JComponent) {
JComponent component = (JComponent)o;
Window win = SwingUtilities.getWindowAncestor(component);
win.dispose();
}
}
答案 1 :(得分:4)
从我认为你可以轻松打开另一个窗口时,只需存储对它的引用并在动作监听器中使用它。这些方面的东西:
JFrame openedWindow;
//inside the listener
if(openedWindow)
openedWindow.dispose();
else dispose();