gpt4 book ai didi

java - 使用其他 jinternalframe 类将 jinternalframe 类添加到 jdesktoppane

转载 作者:行者123 更新时间:2023-11-30 07:32:02 29 4
gpt4 key购买 nike

我正在创建一个非常简单的程序。我创建了这个类:MainJframeClass、JDesktopPaneClass、JinternalFrameClass1 和 JinternalFrameClass2。我所做的是实例化我的 jdesktoppaneclass 并将其命名为 desktoppane1 并将其添加到 MainJframeclass。我还实例化了 2 个 jinternalframes 并将其命名为 internal1 和 internal2。现在,我在 mainjframeclass 中有一个按钮,当我按下时,我将 internal1 添加到 desktoppane1。我现在的问题是如何使用放置在 internal1 中某处的按钮将 internal2 添加到 desktoppane1。我知道为什么我可以向 desktoppane1 添加另一个按钮并添加 internal2。但我已经做到了,我只是想解决这个问题。如果你能帮助我,请。顺便说一句,对不起我的英语。

最佳答案

这只是一个引用问题。向 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();
}
}

关于java - 使用其他 jinternalframe 类将 jinternalframe 类添加到 jdesktoppane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867652/

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