2012-05-24 32 views
4

我想向JApplet中添加4個JPanel,並給每個JApplet添加不同的顏色。但沒有顯示顏色 - 我的意思是我看不到輸出。根本沒有顏色。以下代碼在init()方法中。將JPanels添加到具有空佈局的JApplet

this.setSize(1400, 780); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setLocationRelativeTo(null); 
    this.setLayout(null) ; 

     setLayout(null) ; 

    Panel1 = new JPanel() ; 
    Panel2 = new JPanel() ; 
    Panel3 = new JPanel() ; 
    Panel4 = new JPanel() ; 

    Label1 = new JLabel ("Label1") ; 
    Label2 = new JLabel ("Label2") ; 
    Label3 = new JLabel ("Label3") ; 
    Label4 = new JLabel ("Label4") ; 

    Panel1.add(Label1) ; 
    Panel2.add(Label2) ; 
    Panel3.add(Label3) ; 
    Panel4.add(Label4) ; 

    // Panel 1 "About Me" 
    Panel1.setSize(140,390) ; 
    Panel1.setLocation(0,0) ; 
    Panel1.setBackground(Color.red) ; 
    Panel1.setVisible(true) ; 
    this.add(Panel1) ; 

    // Panel 2 "MyHoppies" 
    Panel2.setSize(140,390) ; 
    Panel2.setLocation(0,700) ; 
    Panel2.setBackground(Color.yellow) ; 
    this.add(Panel2) ; 

    // Panel 3 "Photo Gallery" 
    Panel3.setSize(140,390) ; 
    Panel3.setLocation(390,0) ; 
    Panel3.setBackground(Color.black) ; 
    this.add(Panel3) ; 

    // Panel 4 "Happey face" 
    Panel4.setSize(140,390) ; 
    Panel4.setLocation(390,700) ; 
    Panel4.setBackground(Color.pink) ; 
    this.add(Panel4) ; 
+1

也許是因爲你一直向Panel1應用'setBackground'(和'setLocation')? – assylias

+0

@assylias考慮發佈這個答案作爲答案 –

+0

@GuillaumePolet顯然是一個錯字。 – assylias

回答

6
  • this.setVisible(true)必須在GUI構造

  • 使用Using Java Naming Conventions最後一行代碼正確,則Panel1應該panel1 E.I.

  • 不延伸JFrameJApplet,創建本地變量具有相同的方式爲Panel1

  • 不使用NullLayout,使用正確的LayoutManager相反,在這種情況下GridLayout可能,否則JFrames內容不與JFrame

enter image description here

resiziable

代碼

import java.awt.*; 
import javax.swing.*; 

public class ColorongPanels { 

    private JFrame frame = new JFrame("ColorongPanels"); 
    private JPanel panel1 = new JPanel(); 
    private JPanel panel2 = new JPanel(); 
    private JPanel panel3 = new JPanel(); 
    private JPanel panel4 = new JPanel(); 
    private JLabel label1 = new JLabel("Label1"); 
    private JLabel label2 = new JLabel("Label2"); 
    private JLabel label3 = new JLabel("Label3"); 
    private JLabel label4 = new JLabel("Label4"); 

    public ColorongPanels() { 
     frame.setLayout(new GridLayout(2, 2, 5, 5)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel1.setBackground(Color.red); 
     panel1.setLayout(new BorderLayout()); 
     panel1.add(label1, BorderLayout.CENTER); 
     panel2.setBackground(Color.yellow); 
     panel2.setLayout(new BorderLayout()); 
     panel2.add(label2, BorderLayout.CENTER); 
     panel3.setBackground(Color.black); 
     panel3.setLayout(new BorderLayout()); 
     panel3.add(label3, BorderLayout.CENTER); 
     panel4.setBackground(Color.pink); 
     panel4.setLayout(new BorderLayout()); 
     panel4.add(label4, BorderLayout.CENTER); 
     frame.add(panel1); 
     frame.add(panel2); 
     frame.add(panel3); 
     frame.add(panel4); 
     frame.setLocationRelativeTo(null); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ColorongPanels(); 
      } 
     }); 
    } 
} 
+0

爲什麼從JFrame/JApplet擴展是不好/不好? – brimborium

+1

@brimborium因爲如果不擴展其功能,則不應該擴展類。 –

+1

*「不擴展'JFrame'或'JApplet'」*同意框架,但試着製作一個小程序而不擴展'Applet'或'JApplet';) –

3

你應該這樣做:
panelx.setOpaque(true),它應該工作

+0

隨着x 1,2,3或4 –

+0

謝謝,我看到一些矩形的顏色,但他們沒有填補它想要做的空間。我想把窗口分成四個面板,每個面板都有不同的顏色。我指定的窗口的大小是(1400,700),那麼每個面板應該有大小(400,390)widht和hight按順序 – user1413188

+0

你能否請更新你的代碼,所以我可以有一個更好的主意? –

2

第一:你需要JPanel.setOpaque(true)面板才能看到的背景顏色。

第二:背景色屬性在不同的平臺上有不同的效果。例如:如果你設置了一個JButton的背景,你會在Win7中看到該按鈕的顏色,但不是在WinXP中(不確定,它是如何在其他操作系統下的)。這至少是我的經驗...