我正在創建一個非常簡單的程序。 我已經創建了這個類: MainJframeClass,JDesktopPaneClass,JinternalFrameClass1和JinternalFrameClass2。 我做的是,我實例化我的jdesktoppaneclass並將其命名爲desktoppane1,並將其添加到MainJframeclass。我還實例化了兩個jinternalframes並將其命名爲internal1和internal2。現在,我有mainjframeclass中的按鈕,當我按下時,我將internal1添加到desktoppane1。現在我的問題是如何使用放置在internal1中某處的按鈕將internal2添加到desktoppane1。我知道爲什麼我可以只添加另一個按鈕到desktoppane1並添加internal2。但我已經做到了,我只想解決這個問題。如果你能幫助我。對不起,我的英語順便說一句。使用其他jinternalframe類將jinternalframe類添加到jdesktoppane
2
A
回答
3
這只是一個參考問題。向JDesktopPane添加內容的代碼必須具有對它的引用,因此您需要通過構造函數參數或方法參數將該引用傳遞到需要它的類中。
編輯1
例如:
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
public class ReferenceExample extends JPanel {
private JDesktopPane desktop = new JDesktopPane();
private Random random = new Random();
public ReferenceExample() {
JButton addInternalFrameBtn = new JButton("Add Internal Frame");
addInternalFrameBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addInternalFrame();
}
});
JPanel btnPanel = new JPanel();
btnPanel.add(addInternalFrameBtn);
setPreferredSize(new Dimension(600, 450));
setLayout(new BorderLayout());
add(new JScrollPane(desktop), BorderLayout.CENTER);
add(btnPanel, BorderLayout.SOUTH);
}
public void addInternalFrame() {
MyInternalFrame intFrame = new MyInternalFrame(ReferenceExample.this);
int x = random.nextInt(getWidth() - intFrame.getPreferredSize().width);
int y = random.nextInt(getHeight() - intFrame.getPreferredSize().height);
intFrame.setLocation(x, y);
desktop.add(intFrame);
intFrame.setVisible(true);
}
private static void createAndShowUI() {
JFrame frame = new JFrame("Reference Eg");
frame.getContentPane().add(new ReferenceExample());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
class MyInternalFrame extends JInternalFrame {
// pass in the reference in the constructor
public MyInternalFrame(final ReferenceExample refEg) {
setPreferredSize(new Dimension(200, 200));
setClosable(true);
JButton addInternalFrameBtn = new JButton("Add Internal Frame");
addInternalFrameBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// use the reference here
refEg.addInternalFrame();
}
});
JPanel panel = new JPanel();
panel.add(addInternalFrameBtn);
getContentPane().add(panel);
pack();
}
}
1
如何添加internal2使用internal1某處放置一鍵desktoppane1。
在的ActionListener添加到您的按鈕,你可以使用如下代碼才能到桌面窗格的引用:
Container container = SwingUtilities.getAncestorOfClass(JDesktopPane.class, (Component)event.getSource());
if (container != null)
{
JDesktopPane desktop = (JDesktopPane)container;
JInternalFrame frame = new JInternalFrame(...);
desktop.add(frame);
}
相關問題
- 1. 使用按鈕添加到的JInternalFrame JDesktopPane的其他的JInternalFrame
- 2. 當我將jInternalFrame添加到jDesktopPane中時出現錯誤
- 3. 將JInternalFrame添加到fsem幀
- 4. Java JDesktopPane/JInternalFrame居中問題
- 5. 如何使JDesktopPane中的JInternalFrame不重疊
- 6. 如何將JInternalFrame添加到JFrame中
- 7. 如何將JScrollPane添加到JInternalFrame?
- 8. 重新打開JDesktopPane/JFrame上的JInternalFrame
- 9. 查找JdesktopPane中的JInternalFrame的數量
- 10. 使用netbeans將值從jInternalFrame傳遞到另一個jInternalFrame
- 11. 在這種情況下使用JDesktopPane和JInternalFrame是否合適?
- 12. Java JInternalFrame到JPanel
- 13. 將單獨的JPanel/JInternalFrame加載到單獨的JDesktopPane中(在JFrame中)
- 14. 其他組件從JInternalFrame中泄漏
- 15. Java:從另一個JInternalFrame調用JInternalFrame
- 16. 將JInternalFrame帶到前面
- 17. 的JInternalFrame
- 18. Undecorated JInternalFrame
- 19. Eclipse SWT Shell到JInternalFrame
- 20. Java - JInternalFrame - 無法關閉JFrame中的JInternalFrame
- 21. 使用jInternalFrame的缺點
- 22. JInternalFrame將一個圖標添加到標題欄
- 23. 如何在啓動時打開JDesktopPane中的JInternalFrame
- 24. JDesktopPane邊界 - JInternalFrame的沒有填滿整個桌面
- 25. 如何在JdesktopPane的中心設置一個可見的JinternalFrame?
- 26. 在FrameView中未顯示Windows操作系統上的JDesktopPane和JinternalFrame
- 27. 如何打開以JDesktopPane爲中心的JInternalFrame?
- 28. 重新加載JinternalFrame Java
- 29. 從一個jInternalFrame傳遞值到另一個jInternalFrame
- 30. JInternalFrame不顯示