【问题标题】:Initialize multiple JPanels using a Flow Layout (Homework)使用流布局初始化多个 JPanel(作业)
【发布时间】:2012-11-01 03:31:35
【问题描述】:

我正在尝试使用 FlowLayout 创建一个在其中插入两个 JPanel 的 JFrame。我在一个单独的文件中初始化了框架,但这就是我的名字

public class FlowInFlow extends JFrame
{
public FlowInFlow() {

    setLayout(new FlowLayout());

    JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    panel1.setBackground(Color.RED);

    JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    panel2.setBackground(Color.BLUE);   

}
}

编辑:当我运行它时,我只得到一个空白框,当我需要两个框并排时

【问题讨论】:

  • ...而您遇到的问题是...??你需要告诉我们,因为我们在读心术方面很糟糕,你知道的。
  • 我猜你没有看到“红色或蓝色”,因为组件没有大小。但是,嘿,你告诉我们。为它们设置彩色边框,以检查大小。另外,你的问题是什么?
  • A JPanel 的默认首选大小为 0x0。尝试先向他们添加一些东西。
  • 1) 如果您打算通知他们更新,请添加@HovercraftFullOfEels 2) 为了尽快获得更好的帮助,请发布SSCCE
  • “我需要两个盒子并排”使用单行GridLayout

标签: java swing jpanel layout-manager flowlayout


【解决方案1】:

正如我已经说过的,JPanel 的默认首选大小是 0x0...

这意味着当你将它添加到像FlowLayout 这样的布局时,它会使用首选大小,它会出现......嗯......它不会

public class TestFlowLayout {

    public static void main(String[] args) {
        new TestFlowLayout();
    }

    public TestFlowLayout() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JPanel master = new JPanel(new FlowLayout(FlowLayout.LEFT));
                JPanel left = new JPanel();
                left.setBackground(Color.RED);
                left.add(new JLabel("Lefty"));

                JPanel right = new JPanel();
                right.setBackground(Color.BLUE);
                right.add(new JLabel("Righty"));

                master.add(left);
                master.add(right);

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(master);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

【讨论】:

  • 很好的例子。 ..你和设置PLAF有什么关系?我不明白你为什么要在这些琐碎的事情上花费 7 LOC! (我怀疑如果不设置 PLAF,该示例将显示没有垂直滚动条。)
  • 谢谢,这正是我所需要的(仅使用 FlowLayout)。除了左右,我将初始化按钮。再次感谢
  • @AndrewThompson Netbeans 宏,在构造函数中构建几乎整个代码:P
  • @AndrewThompson 我说的是 Java 7 ;)
【解决方案2】:

除了更改外部布局的建议之外,这些组件从未被添加到任何东西(因此永远不会可见)。

import java.awt.*;
import javax.swing.*;

public class FlowInGrid extends JFrame  {

    public FlowInGrid() {

        setLayout(new GridLayout(1,0));

        JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel1.setBackground(Color.RED);
        // ADD Them to something!
        add(panel1);

        JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        panel2.setBackground(Color.BLUE);   
        // ADD Them to something!
        add(panel2);
    }

    public static void main(String[] args) throws Exception {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                JFrame f = new FlowInGrid();
                f.setSize(300,100);
                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

【讨论】:

  • 感谢您的示例,但对于这个项目,我需要使用 flowlayout 而不是网格。您的其余信息非常有帮助!再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多