2014-10-07 127 views
1

好吧, 我不是很熟悉awt api,所以这对我来说是非常新的东西。我有从我的主类运行这些方法来创建我的jframe。在我的createframe方法下,背景色似乎不适用于框架。任何帮助?JFrame背景颜色不显示

这里是我的框架类

import java.awt.Color; 
import java.awt.Container; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class FrameClass { 

     JFrame frame; 

     public FrameClass(String framename) { 
       frame = new JFrame(framename); 
     } 

     public void CreateFrame() { 
      Color c = new Color(0,255,0); 
      Container con = frame.getContentPane(); 
      con.setBackground(c); 
      frame.getContentPane().setBackground(c); 
       frame.setSize(400, 250); // Set the JFrame size when it is on the login screen 
       frame.setLocationRelativeTo(null); // Center the JFrame 

       /* Display the frame */ 
       frame.setVisible(true); 
     } 

     public void AddPanel() { 
       JPanel ButtonsPanel = new JPanel(); 
       ButtonsPanel.setVisible(true); 
       frame.add(ButtonsPanel); 
     } 
} 

这是我的主类

public class Admin { 

    public static FrameClass FrameObject = new FrameClass("ITWebKit Admin Panel"); 
    public static Database DatabaseObject = new Database(); 

    public static void main(String args[]) { 
     FrameObject.CreateFrame(); 
     FrameObject.AddPanel(); 
    } 
} 

回答

1

ButtonsPanel被掩盖框架的内容窗格(其中你设置的背景)。您可以将ButtonsPanelopaque属性设置为false,也可以将背景设置为ButtonsPanel

为什么发生这种情况

默认的内容窗格有BorderLayoutBorderLayout将拉伸ButtonPanel以适应其尺寸。如果要将内容窗格/框架的布局管理器更改为FlowLayout(其将而不是伸展面板),您将看到背景。

其他注意事项:

  • FrameObject.CreateFrame(); FrameObject.AddPanel();。这会在添加组件之前将帧设置为可见。一般你想添加组件,然后设置框架可见。

  • 遵循Java命名约定。方法名称和变量名称以小写字母开头。

  • Swing程序应该在事件调度线程(EDT)上启动。见Initial Threads

+1

噢,谢谢。不明白,它可能会被过分控制。 – Andrew 2014-10-07 06:27:51