【问题标题】:Two Panels in one JFrame?一个 JFrame 中有两个面板?
【发布时间】:2012-12-21 15:22:29
【问题描述】:

我有两个面板并希望它们显示在我的 JFrame 中,但是当我这样尝试时,我只能看到第二个。有人可以帮帮我吗? :(

import javax.swing.JFrame;

public class MainWindow {

CardLayout layout;
JFrame frame;
Player panel1;
Block panel2;

public MainWindow() {
    frame = new JFrame("Rechteck");
    panel1 = new Player();
    panel2 = new Block();
    panel1.addKeyListener(new KeyListen(panel1));
    frame.add(panel1);
    frame.add(panel2);
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}}

【问题讨论】:

标签: java swing panels


【解决方案1】:

您已将两个面板添加到 BorderLayout.CENTERJFrame 中,只有一个可以占据该位置。这将是添加的最后一个,在本例中为 panel2

为了让面板均匀占据空间,你可以使用GridLayout:

frame.setLayout(new GridLayout(2, 1));

旁白:在 Swing 中为组件注册关键事件时最好使用 Key Bindings

【讨论】:

  • 谢谢。但还有一个问题:每个面板都有 2 个框架部分
  • 以上布局将布局2个面板。你还有更多吗?你也在使用那个 CardLayout 吗? 2 个面板内的布局是什么?
【解决方案2】:

创建一个 JPanel 将其添加到 JFrame。将 panel1 和 panel2 添加到新面板。 JFrame 只能有一个孩子,通常通过调用 JFrame.setContentPane() 来设置。

【讨论】:

  • JFrame 是一个容器,从技术上讲,它可以有任意数量的孩子(事实上它确实如此)。 JFrame 的实现将对addremove(以及其他容器管理方法)的调用重定向到内容窗格。您可以简单地将布局管理器更改为 GridLayout 之类的东西。不需要第三个窗格 - 恕我直言
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
相关资源
最近更新 更多