gpt4 book ai didi

java - 如何从扩展 JDialog 的另一个类调用已经存在的 Activity 框架,然后删除其所有组件?

转载 作者:行者123 更新时间:2023-12-01 18:59:59 25 4
gpt4 key购买 nike

我有class main extends jframe ,它有一个按钮可以调用/显示另一个扩展 jdialog 的类.

如果按钮来自jdialog被触发,它将处理该对话框并删除 jframe 的所有组件,然后将其添加到新的 jpanel .

我应该做什么?

这是我新的损坏的代码:

public class mainz extends JFrame{
mainz(){
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);

JToolBar r = new JToolBar();
r.add(Box.createHorizontalGlue());
add(r, BorderLayout.NORTH);

JButton n = new JButton();
r.add(n, BorderLayout.EAST);

n.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
show();
}
});
}

public void show(){
dialogz d = new dialogz(this);
d.setVisible(true);
}

public void lastHope(){
getContentPane().removeAll();
getContentPane().validate();
getContentPane().repaint();
}

public static void main (String[]args){
new mainz().setExtendedState(MAXIMIZED_BOTH);
}

}

public class dialogz extends JDialog{
public dialogz(final mainz owner) {
setSize(300, 300);
JButton n = new JButton("execute");
add(n);

final JFrame ew = (JFrame)super.getOwner();// <<

n.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
dispose();
//owner.lastHope;
ew.removeAll();// <<
ew.validate();// <<
ew.repaint();// <<
}
});
}

void yes(){
getOwner().removeAll();

getOwner().validate();
getOwner().repaint();
}

}

我知道我可以阻止我的main扩展类 jframe ,并从 main 调用它,但我想这样做......

请帮助我...T-T

对不起我的英语,我来自遥远的国家〜,〜”

更新:错误是

java.lang.ClassCastException:javax.swing.SwingUtilities$SharedOwnerFrame 无法转换为 javax.swing.JFrame

这将通过删除包含的行来完成//<<然后调用lastHope();

但我认为还有另一种方法可以让现有的 jframe 全部删除(通过先转换它或其他东西〜,〜“)

最佳答案

您正在调用 getParent() 但您从未设置父级(或所有者)。正如已经指出的,这应该发生在构造函数中。另外,请注意 getParent() 返回一个 Container 对象,而 getOwner() 返回一个 Window 对象。这两者都引用作为父级和所有者的 JFrame。如果您想将其用作 JFrame,则必须将输出转换为 (JFrame)。但 removeAll() 位于 Container 类中,因此如果这就是您想要的,则无需进行转换。

更新:

JFrame frame = new JFrame();
JDialog dialog = new JDialog(frame);//frame is owner

JFrame parentOfDialog = (JFrame)(dialog.getParent());
//OR
//JFrame parentOfDialog = (JFrame)(dialog.getOwner());
parentOfDialog.removeAll();

如果您使用自定义类,请在构造函数中传递 JFrame 并调用 super

请阅读 JDialog 上的 javadoc在您尝试使用它之前。另外,请阅读有关继承的更多信息。

关于java - 如何从扩展 JDialog 的另一个类调用已经存在的 Activity 框架,然后删除其所有组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12613234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com