我需要在点击JXPanel
按钮时放置一个扩展Cancel
的类,似乎无法找到任何方法。
我有A级,有按钮A. 点击按钮A,B类被调用。 B类有一个显示所有内容的显示方法,并调用ClassC
class A : in actionPerformed()
if (e.getSource().equals(buttonA )){
try {
new ClassB(parent);
} catch (BusinessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
In class B
private void display() throws BusinessException{
dialog = new JDialog(parent, "Dialog");
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setContentPane(createContentPane());
dialog.setModal(true);
//dialog.setBackground(Color.WHITE);
dialog.setMinimumSize(new Dimension(1190, 200));
//dialog.setMaximumSize(new Dimension(1190, 500));
dialog.pack();
dialog.setLocationRelativeTo(parent);
dialog.setVisible(true);
}
in createContentPane()
public JPanel createContentPanel() throws BusinessException{
JPanel panel = new JPanel(new CardLayout());
panel.setBackground(Color.WHITE);
panel.add("New Dialog", new ClassC(parent));
return panel;
}
现在我在ClassC中有取消按钮,单击此C类我需要关闭ClassB的对话框
答案 0 :(得分:2)
首选解决方案是定义某种类型的控制器,您可以将其传递给C类,它可以用来提供某些操作的通知,例如取消操作。
控制器将负责根据动作/事件确定应该做什么
的示例另一种解决方案是允许对话框控制取消(以及其他相关的用户操作)本身,因为取消并不总是对C类有意义,要么您将使用该类生成的值,要么您赢了& #39;它不应该是C级的责任来管理这个(模型进入的地方)
另一个解决方案是将对话框的引用传递给类C,但这会在对话框和类之间产生紧密耦合并不必要地暴露对话
另一个解决方案是使用SwingUtilities.windowForComponent
,这将允许您获取对包含该类的窗口的引用,但这会假设该类可能如何使用