我有2个框架,第一个框架只有一个框架和一个按钮,这将导致另一个框架具有所有组件,例如具有更多组件的标签。
我使用的代码是:
button_1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
JFrame Frame_2 = new JFrame();
Frame_1.setVisible(false);
Frame_2.setVisible(true);
}
});
这是创建一个新的单独框架,但我想在现有JFrame
上创建新的JFrame
更新
@VinceEmigh +1
感谢您提供详细的自定义解决方案。它表明有人真的愿意帮助,我是一个自学者,仅在3个月前开始,所以你的代码有点难以理解,但使用cardlayout的想法完成了工作,我想出了一个解决方案。
JFrame guiFrame = new JFrame();
CardLayout cards;
JPanel cardPane;
JButton B_1 = new JButton("Next Card");
B_1.setActionCommand("Next Card");
B_1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
cards.next(cardPane);
}
});
cards = new CardLayout();
cardPane = new JPanel();
cardPane.setLayout(cards);
cards.show(cardPane, "Main");
JPanel Card_1 = new JPanel();
JLabel background_1 = new JLabel(new ImageIcon("C:\\Users\\ME\\Desktop\\Back1.jpg"));
Card_1.add(background_1);
Card_1.add(B_1);
JPanel Card_2 = new JPanel();
JLabel background_2 = new JLabel(new ImageIcon("C:\\Users\\ME\\Desktop\\Back2.jpg"));
Card_2.add(background_2);
cardPane.add(Card_1, "Main");
cardPane.add(Card_2, "Sub");
答案 0 :(得分:1)
你不应该使用2帧。您应该使用1帧,然后使用CardLayout在帧中的面板之间切换。除非您指的是在框架内嵌套框架,否则为1个应用程序创建2个不同的框架通常是不好的做法,如果可能应该避免使用。
将框架布局设置为CardLayout,在框架中添加2个面板。一个面板包含按钮,另一个面板包含组件。
当您的按钮事件触发动作侦测器时,请使用您为帧布局添加的卡布局切换面板。
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class App extends JFrame {
private CardLayout cl = new CardLayout();
private JPanel firstPanel = new FirstPanel();
private JPanel secondPanel = new SecondPanel();
public App() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
setLayout(cl);
add(firstPanel, "first");
add(secondPanel, "second");
setLocationRelativeTo(null);
setVisible(true);
}
public void switchPanel(String name) {
cl.show(getContentPane(), name);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
App app = new App();
}
});
}
class FirstPanel extends JPanel implements ActionListener {
private JButton button = new JButton("Button");
public FirstPanel() {
button.addActionListener(this);
add(button);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button) {
switchPanel("second");
}
}
}
class SecondPanel extends JPanel { }
}