2016-04-24 85 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元素放在它上面,这个方法负责做这个 –