首页 > 解决方案 > java - 如何在Java swing中用背景色填充整个面板?

问题描述

我最近开始学习 Java,现在正在尝试使用 Swing,所以我对此还是很陌生。我正在尝试使用(在此示例中)1 行和 1 列来制作 gridbaglayout,所以我在布局中添加了一个带有一些背景颜色的 JPanel,但是背景颜色似乎只出现在文本的长度上,而不是整个面板。我希望背景颜色在行的整个长度上保持不变,

另外,我必须添加第二个带有大 weightx 的列,以确保我的面板不会自动居中,有没有更好的方法来实现呢?

这是我目前拥有的代码,

      public static void main(String args[]) {
            JFrame mainFrame = new JFrame();
            mainFrame.setSize(900, 600);
            mainFrame.setLayout(new GridBagLayout());

            JPanel roll = new JPanel();
            roll.setBackground(new Color(190, 177, 245));

            JLabel wageChangeTag = new JLabel("Change");

            GridBagConstraints gRoll = new GridBagConstraints();

            gRoll.gridx = 0;
            gRoll.gridy = 0;
            gRoll.weightx = 5;
            gRoll.anchor = GridBagConstraints.CENTER;
            roll.add(wageChangeTag, gRoll);

            ////////////// MAIN GRID//////////////////
            GridBagConstraints gc = new GridBagConstraints();
            gc.gridx = 0;
            gc.gridy = 0;
            gc.weightx = 5;
            gc.anchor = GridBagConstraints.FIRST_LINE_START;
            gc.weighty = 5;
            mainFrame.add(roll, gc);

            gc.gridx++;
            gc.weightx = 0.1;
            mainFrame.add(new JLabel(), gc);

            mainFrame.setVisible(true);
            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
}

标签: javaswing

解决方案


你看到的画的其实都是你的 JPanel,和你里面的标签无关。例如,您可以通过为其添加边框来看到这一点(在您设置背景之后:

roll.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

现在让它水平扩展,请尝试在您的 JPanel GridBagConstraints 中添加以下行:

gc.fill = GridBagConstraints.HORIZONTAL;

推荐阅读