import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class hello
  {
   public static void main(String args[])
      {
      new win();
     }
   }
class win extends JFrame
   {JPanel pp=new JPanel();
    JTextField tt1=new JTextField(5);
    JTextField tt2=new JTextField(5);
    JButton bb1=new JButton("计算"); 
    JButton bb2=new JButton("复原");  
    JLabel cc1=new JLabel("+");
    JLabel cc2=new JLabel("答案=");
    public win()
      {
       super();
        bb1.addActionListener(new ActionListener()
           {
           public void actionPerformed(ActionEvent e)
           {
            int x=Integer.parseInt(tt1.getText());
            int y=Integer.parseInt(tt2.getText());
            int z=x+y;
            cc2.setText("答案="+z); 
           }
           });
        bb2.addActionListener(new ActionListener()
           {
           public void actionPerformed(ActionEvent e)
           {
            tt1.setText("0");
            tt2.setText("0");
            cc2.setText("答案="); 
           }
           });
       setTitle("UI测试");
       setSize(200,20);
       pp.setSize(200,20);
       add(pp);
       pp.setLayout(new BorderLayout());
       pp.add(tt1);
       pp.add(cc1);
       pp.add(tt2);
       pp.add(bb1); 
       pp.add(bb2);  
       pp.add(cc2); 
       setDefaultCloseOperation(EXIT_ON_CLOSE);
       setVisible(true);
      }
}
       好久不接触JAVA,想温习下,但是现在除了用pack方法,运行是不显示窗体内容,只显示一个功能条,希望各位高手指教下:
应该按怎样的顺序自定义窗体的大小

解决方案 »

  1.   

    建议楼主好好去看看BorderLayout是怎么用的
    还有,最近发现这里帖的好多代码都有一个共同的特点:单独写一个class里面就放一个public static void main(String args[])
    不知道这种做法是哪本书上介绍的或者是哪个高手发明的,本人在这里严重BS之,main方法干嘛非要写在个单独的class里????
      

  2.   


    老兄,这个不只是布局管理器简单,这个查下API文档就可以,我开始用流布局,加pack方法是正常,但是去掉pack方法,自定义窗体大小,无论换什么布局都没有效果,这里只不过换到其中一个而已.至于main方法,个人习惯问题,何必苛求,况且main是静态方法,类里很多非静态属性不能用,还不如单独放在一个类里容易管理.
      

  3.   

    jdk上面有说明http://java.sun.com/javase/6/docs/api/java/awt/Window.html#pack()pack
    public void pack()Causes this Window to be sized to fit the preferred size and layouts of its subcomponents. If the window and/or its owner are not yet displayable, both are made displayable before calculating the preferred size. The Window will be validated after the preferredSize is calculated. See Also:
    Component.isDisplayable()
      

  4.   

    楼主是不是想要这种效果? 我主要帮你修改了下顺序
    你看看吧
    代码如下
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class hello {
    public static void main(String args[]) {
    new win();
    }
    }class win extends JFrame {
    JPanel pp = new JPanel();
    JTextField tt1 = new JTextField(5);
    JTextField tt2 = new JTextField(5);
    JButton bb1 = new JButton("计算");
    JButton bb2 = new JButton("复原");
    JLabel cc1 = new JLabel("+");
    JLabel cc2 = new JLabel("答案="); public win() {

    bb1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    int x = Integer.parseInt(tt1.getText());
    int y = Integer.parseInt(tt2.getText());
    int z = x + y;
    cc2.setText("答案=" + z);
    }
    }); bb2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    tt1.setText("0");
    tt2.setText("0");
    cc2.setText("答案=");
    }
    });
    setTitle("UI测试");
    setSize(200, 20);
    pp.setSize(200, 20);
    pp.add(tt1);
    pp.add(cc1);
    pp.add(tt2);
    pp.add(bb1);
    pp.add(bb2);
    pp.add(cc2);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    add(pp);
    this.pack();
    setVisible(true);
    }
    }
      

  5.   

    可能我说不够明白,存在歧义.
    布局管理器什么的,这个不存在疑问,即使有也可以查API文档
    至于pack(),相信大家都知道其作用是把窗口大小调整到能显示所有组件.
    我的意思,怎么不使用pack方法,自定义窗口的大小.
    从代码里也可以看到我是设了窗口大小的,但实际运行时只能看蓝条,下面的窗体看不到.5.0以前的版本是需要getContentPane这个方法来获得容器,然后再调整大小.而我现在使用的6.0版,使用JFrame的add方法时其实已经默认为JFrame添加容器了,但是就是找不到原因为什么会无法调整大小.
      

  6.   

    你的程式码有一个问题,
    pp.setLayout(new BorderLayout());
           pp.add(tt1);
           pp.add(cc1);
           pp.add(tt2);
           pp.add(bb1);
           pp.add(bb2);
           pp.add(cc2);你如果要用BorderLayout(),后面的add()该是这样pp.add(tt1, BorderLayout.SOUTH);之类的,
    也许你要用的是FlowLayout()。再来你提到的问题,你的setSize(),给的值是分别是(200, 20),
    height = 20,20的height,光视窗条就占掉了height,
    改成setSize(200, 100);之后,自然就会显示出你要的视窗。