我不确定这是否是您的预期输出,但这是我的尝试:
import javax.swing.*;
import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.awt.Dimension;
public class FrameTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
//swing objects should be built in the event dispatch thread, since they're not thread safe.
public void run() {
buildFrame();
}
});
}
public static void buildFrame() {
JFrame frame1 = new JFrame("FRAME1");
JFrame frame2 = new JFrame("FRAME2");
JPanel panel = new JPanel();
panel.setBackground(Color.GREEN);
panel.setPreferredSize(new Dimension(300, 300));
//let's give this empty panel a size and a color so that we can see the panel when visible
panel.setVisible(false);
JButton button = new JButton("CLICK");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
panel.setVisible(true);
frame2.pack();
}
});
frame1.getContentPane().add(button);
frame1.setSize(200, 200);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.getContentPane().add(panel);
frame2.setSize(300, 300);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setLocationRelativeTo(null);
frame1.setVisible(true);
frame2.setVisible(true);
}
}
如果运行此帧,则有两个帧。单击“ FRAME1”中的按钮将使面板在“ FRAME2”中可见。在评论中,您说您尝试过pack(),setVisible()之类的方法。
不知道为什么没有提供代码,但是为什么这个没用!