2016-12-30 265 views
3

所以我尝试过使用getContentPane()。setBackground(Color.white), ,并尝试将表和scrollpane设置为white。设置JPanel的背景颜色

@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); 
+0

它是你试图改变的平衡帧吗? – Aaron

+0

@Aaron是的,它是 – Zack

+1

为了更好的帮助,尽快发布[mcve]。不知道为什么你的帖子有这么多upvotes – MasterBlaster

回答

2

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

+0

这正是我想要的, 谢谢。 – Zack

+0

请注意,如果您将非透明组件设置为viewPort的视图,它将遮挡视口并希望看到更改;) – MadProgrammer

0

尝试:

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

OR

balanceFrame.setBackgroundColor(Color.RED); 
+0

没有那个运气:\ – Zack

+0

我编辑了我的回复@Zack – Aaron

+0

是啊我试过了两个 – Zack