【问题标题】:Setting Background Color of JPanel设置JPanel的背景颜色
【发布时间】:2016-12-30 00:11:51
【问题描述】:

所以我尝试使用 getContentPane().setBackground(Color.white), 并尝试将表格和滚动窗格也设置为白色。

@SuppressWarnings("serial")
public class BalanceFrame extends JFrame {

private JTable table;
public BalanceFrame(String title, String value) throws Exception {
    super(title);
    SpringLayout springLayout = new SpringLayout();
    getContentPane().setLayout(springLayout);

    JScrollPane scrollPane = new JScrollPane();
    springLayout.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.NORTH, getContentPane());
    springLayout.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, getContentPane());
    springLayout.putConstraint(SpringLayout.SOUTH, scrollPane, 0, SpringLayout.SOUTH, getContentPane());
    springLayout.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.EAST, getContentPane());
    getContentPane().add(scrollPane);

    ResultSet res = Operations.writeBalanceResult(value);
    JTable table = new JTable(Operations.writeResult(res)); 
    table.setAutoResizeMode( table.AUTO_RESIZE_OFF);
    scrollPane.setViewportView(table);




    for (int column = 0; column < table.getColumnCount(); column++) {
        TableColumn tableColumn = table.getColumnModel().getColumn(column);
        int preferredWidth = tableColumn.getMinWidth();
        int maxWidth = tableColumn.getMaxWidth();

        for (int row = 0; row < table.getRowCount(); row++) {
            TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
            Component c = table.prepareRenderer(cellRenderer, row, column);
            int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
            preferredWidth = Math.max(preferredWidth, width);

            if (preferredWidth >= maxWidth) {
                preferredWidth = maxWidth;
                break;
            }
        }

        TableCellRenderer headerRenderer = tableColumn.getHeaderRenderer();

        if (headerRenderer == null) {
            headerRenderer = table.getTableHeader().getDefaultRenderer();
        }

        Object headerValue = tableColumn.getHeaderValue();
        Component headerComp = headerRenderer.getTableCellRendererComponent(table, headerValue, false, false, 0, column);
        preferredWidth = Math.max(preferredWidth, headerComp.getPreferredSize().width);

        if (preferredWidth >= maxWidth) {
            preferredWidth = maxWidth;
            break;
        }

        tableColumn.setPreferredWidth(preferredWidth + 6);
    }



}
}

这是唯一一个我无法改变颜色的框架,它是在另一个类中创建的 -

menuItemBalanceSheet.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        try {
                            balanceFrame = new BalanceFrame("BalanceSheet", value);

                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                        balanceFrame.setSize(1200, 600);
                        balanceFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        balanceFrame.setVisible(true);  
                    }
                });

我已经让另一个面板通过此操作成功更改颜色

companyPanel = new CompanyPanel();
companyPanel.setBackground(Color.white);

【问题讨论】:

  • 是你想要改变的 balanceFrame 吗?
  • 如需更好的帮助,请尽快发布minimal reproducible example。不知道为什么你的帖子得到了这么多赞
  • 滚动窗格挡住了内容窗格,组件一般不透明
  • 在您的情况下,您可能需要根据您的需要更改表格和/或单元格渲染器的颜色

标签: java swing


【解决方案1】:

您可以尝试使用scrollPane.getViewport().setBackground(Color.XXX) 设置滚动窗格的viewport 的背景。

【讨论】:

  • 请注意,如果您将非透明组件设置为视口的视图,它会遮挡视口,您希望看到更改;)
【解决方案2】:

试试:

balanceFrame.getContentPane().setBackgroundColor(Color.RED);

balanceFrame.setBackgroundColor(Color.RED);

【讨论】:

  • 运气不好:\
  • 您是否尝试过像这样将面板设置为不透明:panel.setOpaque(false) @Zack
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 2023-03-25
  • 2010-09-17
  • 2018-07-15
  • 2014-09-04
  • 2010-11-10
  • 2013-08-04
相关资源
最近更新 更多