【问题标题】:Can't change the layout border color无法更改布局边框颜色
【发布时间】:2011-10-06 22:21:27
【问题描述】:

我正在做一个简单的 Swing 布局(请参阅 image),但由于某种原因,无论我尝试什么,我都无法更改分隔 UI 三个部分的“边框”的颜色。我错过了什么吗?

布局是使用 GroupLayout 完成的。

编辑:

绿色部分是 GroupLayout 中包含的每个单独的 JPanel。

我已经在任何有意义的对象上尝试了背景色和前景色。我尝试将 EmptyBorder 应用于每个 jpanels,但仍然没有运气。我认为这可能与布局有关,但我什至不确定。

这是相关的布局代码。请注意,这都是由 Netbeans 自动生成的:

    javax.swing.GroupLayout pnlTopLayout = new javax.swing.GroupLayout(pnlTop);
        pnlTop.setLayout(pnlTopLayout);
        pnlTopLayout.setHorizontalGroup(
            pnlTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 532, Short.MAX_VALUE)
        );
        pnlTopLayout.setVerticalGroup(
            pnlTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 59, Short.MAX_VALUE)
        );

javax.swing.GroupLayout pnlSideLayout = new javax.swing.GroupLayout(pnlSide);
        pnlSide.setLayout(pnlSideLayout);
        pnlSideLayout.setHorizontalGroup(
            pnlSideLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 200, Short.MAX_VALUE)
        );
        pnlSideLayout.setVerticalGroup(
            pnlSideLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 214, Short.MAX_VALUE)
        );

javax.swing.GroupLayout pnlMainLayout = new javax.swing.GroupLayout(pnlMain);
        pnlMain.setLayout(pnlMainLayout);
        pnlMainLayout.setHorizontalGroup(
            pnlMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 326, Short.MAX_VALUE)
        );
        pnlMainLayout.setVerticalGroup(
            pnlMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 214, Short.MAX_VALUE)
        );

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(pnlSide, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(pnlMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addComponent(pnlTop, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(pnlTop, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlSide, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );

【问题讨论】:

  • 除非您有一些示例代码,否则此问题无法回答。你试过什么?
  • 编辑:更新包括一些布局代码
  • @tleCan,您应该编辑标签以包含“swing”。
  • @tleCan,你想要改变灰色区域颜色的能力吗?如果是这样,那与您的JPanels 的边界无关。

标签: java swing layout colors border


【解决方案1】:

您应该设置容器内容窗格的背景颜色,或者覆盖它的JComponent(例如JPanel)。


public final class Demo {
    private static BufferedImage bi;
    
    public static void main(String[] args){
        try {
            loadImage();
            
            SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run() {
                    createAndShowGUI();             
                }
            });
        } catch (IOException e) {
            // handle exception
        }
    }
    
    private static void loadImage() throws IOException{
        bi = ImageIO.read(Demo.class.getResource("../resources/whitefro1.jpg"));
    }
    
    private static void createAndShowGUI(){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        final JPanel panel = new JPanel();
        panel.setBackground(Color.BLUE.darker()); // here
        
        final JLabel labelOne = new JLabel();
        labelOne.setIcon(new ImageIcon(bi));
        final JLabel labelTwo = new JLabel();
        labelTwo.setIcon(new ImageIcon(bi));
        
        panel.add(labelOne);
        panel.add(labelTwo);
        frame.add(panel);       
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}


如您所见,中间的区域被染成深蓝色。

【讨论】:

  • 完美做到了!谢谢!在 JFrame 上执行 this.setBackground... 和 this.getContentPane().setBackground... 有什么区别?
  • 显然它不会让我一个小时。不过我会回来检查的。再次感谢。
  • 遗憾的是这不起作用。占据 jframe 的所有三个 jpanel 都已经设置了背景颜色。它工作得很好,但它仍然显示灰色分离器
  • @tleCan,即使您使用frame.getContentPane().setBackground(Color.BLUE.darker()) 设置JFrame 的背景颜色?
  • @tleCan,如果可行,请单击复选标记接受此答案。内容窗格是您看到的灰色区域。它包含您所有的 JPanel 实例。
猜你喜欢
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2019-11-19
  • 2014-12-30
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多