2017-09-20 40 views
0

我似乎無法弄清楚爲什麼我的JFrame是空的。我哪裏錯了?爲什麼我的JFrame是空的?

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

公共類GUIExample擴展的JFrame {

JCheckBox box1 = new JCheckBox("Satellite Radio"); 
JCheckBox box2 = new JCheckBox("Air Conditioning"); 
JCheckBox box3 = new JCheckBox("Manual Tranmission"); 
JCheckBox box4 = new JCheckBox("Leather Seats"); 
JRadioButton radio1 = new JRadioButton("Car"); 
JRadioButton radio2 = new JRadioButton("Pickup Truck"); 
JRadioButton radio3 = new JRadioButton("Minivan"); 
JTextField text = new JTextField(); 
ButtonGroup group = new ButtonGroup(); 

public void newGUI() { 

    setLayout(new FlowLayout()); 
    JPanel panel = new JPanel(); 
    JPanel textPanel = new JPanel(); 

    add(textPanel); 
    add(panel); 

    panel.add(box1); 
    panel.add(box2); 
    panel.add(box3); 
    panel.add(radio1); 
    panel.add(radio2); 
    panel.add(radio3); 
    group.add(radio1); 
    group.add(radio2); 
    group.add(radio3); 

} 

public static void main(String[] args) { 

    JFrame frame = new JFrame("GUI Example"); 
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 

} 

}

回答

0

你忘了添加的contentPane在你的JFrame,像這樣

frame.setContentPane(panel); 

我你使用繼承通知構建你的jFrame,所以在這種情況下你需要實例化你自己的類。我用minimun重構了你的代碼來運行一個jFrame。

public class GUIExample extends JFrame { 

    JCheckBox box1 = new JCheckBox("Satellite Radio"); 

    public static void main(String[] args) { 
     JFrame frame = new GUIExample("GUI Example"); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new FlowLayout()); 
     panel.add(box1); 

     frame.setContentPane(panel); 
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setSize(500, 500); 
     frame.setVisible(true); 
    } 
} 

基本上你創建的JFrame,創建一個JPanel中,添加組件此面板和麪板與setContentPane(panel)設置爲你的框架。

我很抱歉,我現在不能測試此權利,所以如果有人可以,如果需要修復,會很感激,但這樣的事情。

+0

不客氣=) – renanpallin

0

這一切首先是一個相當好的嘗試你正在嘗試做的。但是,對於如何編寫GUI,似乎存在一些基本的誤解。

在java中有兩種製作GUI的方法。您可以創建框架和麪板對象,然後添加您的組件,或者您可以創建和擴展自己的類extends JFrame。但在這種情況下,你已經試圖做到這一點。您已經擴展了JFrame並且已經創建了這些對象。

其實我挺喜歡你如何試圖擴展JFrame的,所以我一直在繼續這一點,並提出,添加的東西到你的屏幕代碼!

見下文 - GUIExample.java:

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

public class GUIExample extends JFrame { 

    JCheckBox box1 = new JCheckBox("Satellite Radio"); 
    JCheckBox box2 = new JCheckBox("Air Conditioning"); 
    JCheckBox box3 = new JCheckBox("Manual Tranmission"); 
    JCheckBox box4 = new JCheckBox("Leather Seats"); 
    JRadioButton radio1 = new JRadioButton("Car"); 
    JRadioButton radio2 = new JRadioButton("Pickup Truck"); 
    JRadioButton radio3 = new JRadioButton("Minivan"); 
    JTextField text = new JTextField(); 
    ButtonGroup group = new ButtonGroup(); 

    GUIExample() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500, 500); 
     setVisible(true); 

     newGUI(); 
    } 


    public void newGUI() { 

     setLayout(new FlowLayout()); 
     JPanel panel = new JPanel(); 
     JPanel textPanel = new JPanel(); 

     add(textPanel); 
     add(panel); 

     panel.add(box1); 
     panel.add(box2); 
     panel.add(box3); 
     panel.add(radio1); 
     panel.add(radio2); 
     panel.add(radio3); 
     group.add(radio1); 
     group.add(radio2); 
     group.add(radio3); 

    } 

} 

test.java:

public class test { 

    public static void main(String[] args) { 
     GUIExample e = new GUIExample(); 
    } 
} 

得到這個工作。編譯這兩個文件,然後通過test.java運行你的程序。

而且你原來的解決方案,無處你添加一個newGUI()調用,這樣所有的代碼變得多餘。但是,由於主要方法是靜態的,因此無論如何您都無法調用它。

我希望這有助於!

+0

有道理,謝謝。 –

+0

不客氣。 –