[英]How to create an Interface for a class that extends JDialog (or in general another class)
[英]how to call active frame that already exist from another class that extends JDialog then remove all of its component?
我有一個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調用它,但是我想那樣做...
請幫助我... TT
抱歉,我是來自遙遠國家的英語,~~~”
更新:錯誤是
java.lang.ClassCastException:javax.swing.SwingUtilities $ SharedOwnerFrame無法轉換為javax.swing.JFrame
刪除包含// <<的行,然后調用lastHope()即可。
但是我認為還有另一種方法可以使現有的jframe刪除全部(通過先轉換它或類似的東西〜,〜“)
我不清楚您的目標是什么,但是如果您想更改容器中顯示的組件(例如JFrame或JDialog的contentPane),那么我建議您使用CardLayout來執行此操作,因為它允許您輕松交換“視圖”。
可能有兩種方法可以做到這一點:
super
構造函數中,以使您的模態正確運行)。 然后,您可以在JFrame的類中調用任何公共方法。 revalidate()
和repaint()
。 順便說一句:由於英語不是您的母語,也不是該論壇上許多人的母語,因此請避免使用非標准縮寫。 您與我們的交流越清晰,我們就越容易理解您並為您提供幫助。
您正在調用getParent()
但從未設置父級(或所有者)。 如前所述,這應該在構造函數中發生。 另外,請注意, getParent()
返回一個Container
對象,而getOwner()
返回一個Window
對象。 這兩個都引用了作為父級和所有者的JFrame。 如果要將其用作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。 另外,請閱讀有關繼承的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.