2016-04-24 79 views
-1

我有包含GUI的此活動。此活動包括輸入長度和寬度,x和y(畫布中形狀的位置)以及選擇形狀,矩形或圓形的按鈕。點擊按鈕後,它接受文本字段內的長度,寬度,x和y。Java - JFrame,JPanel和組件不會顯示

手動擺弄GUI代碼後,JPanels和JFrames即使在設置大小後也不會顯示,只是純粹的空白。

我期待將畫布放在左側,標籤,文本框和按鈕位於右側。我究竟做錯了什麼?我仍然處於該項目的早期階段,只是美學。謝謝。

public class Problem02{ 
    Problem02(){ 
     JFrame framer = new JFrame("Problem 02"); 
     framer.setLayout(new FlowLayout()); 
     framer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel LPanel = new JPanel(); 
     JPanel RPanel = new JPanel(); 
     Canvas canvasses = new Canvas();Label XLabel = new Label("X"); 
     JLabel YLabel = new JLabel("Y"); 
     JLabel WidthLabel = new JLabel("Width"); 
     JLabel LengthLabel = new JLabel("Length"); 
     JButton RectangleButton = new JButton("Rectangle"); 
     JButton CircleButton = new JButton("Circle"); 
     JTextField XText = new JTextField(""); 
     JTextField YText = new JTextField(""); 
     JTextField WidthText = new JTextField(""); 
     JTextField LengthText = new JTextField(""); 

     framer.add(LPanel, BorderLayout.WEST); 
     framer.add(RPanel, BorderLayout.EAST); 
     LPanel.add(canvasses); 
     RPanel.add(XLabel); 
     RPanel.add(XText); 
     RPanel.add(YLabel); 
     RPanel.add(YText); 
     RPanel.add(WidthLabel); 
     RPanel.add(WidthText); 
     RPanel.add(LengthLabel); 
     RPanel.add(LengthText); 
     RPanel.add(RectangleButton); 
     RPanel.add(CircleButton); 

     framer.setSize(500,500); 
     framer.setTitle("Problem 02"); 
     framer.setVisible(true); 
    } 
    public static void main(String[] args) { 
    new Problem02(); 

    } 


    public void actionPerformed(ActionEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowOpened(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowClosing(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowClosed(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowIconified(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowDeiconified(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowActivated(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public void windowDeactivated(WindowEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

} 
+0

把setVisible(true)放在你的主要方法中。新的Problem02.setVisible(true); –

+0

也應該將您的JPanel添加到您的JFrame中以查看添加的組件。使用:framer.add(xPanel); –

+0

我已經做了framer.add(LPanel);和framer.add(RPanel); – user3255372

回答

1

你從JFrame中延伸PLUS你使用一個JFrame變量(成幀器)......你所有的組件添加到變量,但你不顯示framer,你看this

不要延長JFrame的,一個改變的最後一個行

framer.setSize(500,500); 
    framer.setTitle("Problem 02"); 
    framer.setVisible(true); 

另外,請堅持命名約定:小寫字母變量,你甚至欺騙StackOverflows文本高亮分析器;-)

+0

謝謝!順便說一句,對StackOverflow來說很新,我可以在這裏評論這裏的佈局嗎?我希望畫布出現在左側,按鈕在右側,但我該怎麼做? FlowLayout是老師教給我們的唯一佈局,它只是按鈕的中心,我看不到畫布。 – user3255372

+0

這裏有很多很好的佈局教程。您可以使用BorderLayout,而不是使用FlowLayout,而將'framer.add(LPanel);'行更改爲'framer.add(LPanel,BorderLayout.WEST); framer.add(RPanel,BorderLayout.EAST);' 或者您也可以將其中一個設置爲'CENTER'。 – JayC667

+0

我做了你所說的東西方BorderLayout,並更改了framer.setLayout(new FlowLayout());到framer.setLayout(新的BorderLayout());.畫布應該是灰色的?我怎樣才能讓畫布的面板有點像屏幕一樣?我希望整個左側面板都是畫布。 – user3255372

0

您可以像從前一樣將Problem02從Jframe擴展出來,但不必使用對象框架,而是可以這樣做:this.setLayout(new FlowLayout()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

並且不要忘記這個 this.getContentPane()。add(RPanel); this.getContentPane()。add(LPanel);

+0

我已經使用了getContentPane();但定義太教科書了。它的目的是什麼? – user3255372

+0

Jframe就像一個包,你把所有的GUI元素放在它上面,這個方法負責做這個 –