如标题所描述一样,这个问题不知道是怎么回事?
下面是我的代码:
写的是一个计算器程序。import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;import javax.swing.*;
public class CaluateFrame extends JFrame implements ActionListener{
/**
 * @author: mafer
 */
//面板和滚动条
private JPanel jp;//总的面板
private JPanel jp1,jsp_jp2 = null;
private JScrollPane jsp = null;
//输入框
private JTextField jtf;
//数字键
private JButton jb0,jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9;
//运算符键
private JButton jbDian,jbAdd,jbSub,jbSum,jbMul,jbChu,jbYuShu,jbZhengFU;
//功能键
private JButton jbDel,jbClear;
//存储  每次结果的文本框
private JTextArea jtaResult;
//设置程序坐标及大小      参数
private static final Rectangle size = new Rectangle(100, 100, 280, 400);
Font f = new Font("宋体",Font.PLAIN,28);
Font f2 = new Font("宋体",Font.PLAIN,18);

//界面制作

CaluateFrame(){
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(size);
// this.setResizable(false); //设置大小不可调整

jp = new JPanel(new BorderLayout());
// jp = new JPanel();
// this.setContentPane(jp);
this.add(jp);

//在北边添加 输入框
jtf = new JTextField("", 10);
jtf.setFont(f);
jp.add(jtf,BorderLayout.NORTH);

//在中间添加按钮控件


//jb0,jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9;
jb0 = new JButton("0");
jb1 = new JButton("1");
jb2 = new JButton("2");
jb3 = new JButton("3");
jb4 = new JButton("4");
jb5 = new JButton("5");
jb6 = new JButton("6");
jb7 = new JButton("7");
jb8 = new JButton("8");
jb9 = new JButton("9");

//jbDian,jbAdd,jbSum,jbCheng,jbChu,jbYuShu,jbZhengFU;
jbDian  = new JButton(".");
jbAdd = new JButton("+");
jbSub = new JButton("-");
jbMul = new JButton("*");
jbChu = new JButton("/");
jbYuShu = new JButton("%");
jbZhengFU = new JButton("+_");
jbSum = new JButton("=");
//jbDel,jbClear
jbDel = new JButton("del");
jbClear = new JButton("c");

//添加上述按钮到中间面板中
jp1 = new JPanel(new GridLayout(5,4));
jp1.add(jbDel);
jp1.add(jbClear);
jp1.add(jbZhengFU);
jp1.add(jbYuShu); //第一行 
jp1.add(jb1);
jp1.add(jb2);
jp1.add(jb3);
jp1.add(jbAdd); //第二行
jp1.add(jb4);
jp1.add(jb5);
jp1.add(jb6);
jp1.add(jbSub); //第三行
jp1.add(jb7);
jp1.add(jb8);
jp1.add(jb9);
jp1.add(jbMul); //第四行
jp1.add(jb0);
jp1.add(jbDian);
jp1.add(jbSum);
jp1.add(jbChu); //第五行

jp.add(jp1,BorderLayout.CENTER);

//南部  ---显示每次计算后的表达式
jtaResult = new JTextArea("显示每次的表达式\n",4,30);
jtaResult.setFont(f2);
jsp_jp2 = new JPanel();
jsp = new JScrollPane(jsp_jp2,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jsp_jp2.add(jtaResult);

jp.add(jsp,BorderLayout.SOUTH);

// this.add(jtf);
// this.add(jp1);
// this.getContentPane().add(jsp);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new CaluateFrame();
} public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}}

解决方案 »

  1.   

    我用swt的。
    好像遇到这种情况一般是加了组件最后shell没有使用layout()
    有时候设置一下shell的初始化大小也会有效果。不知道awt是不是一样,楼主可以试试。
      

  2.   

    将构造函数CaluateFrame中的 this.setVisible(true);放到构造函数的最后位置
    如:
    CaluateFrame()
        {
            
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setBounds(size);
             ....
             //这个必须放到最后
             this.setVisible(true);
      }
    ok 楼主结贴吧!
      

  3.   

    几年前遇到过,setVisible实际上就是调用的 show方法,你在面板一开始先show出来,再去向面板增加元素,可能不会即时“刷新”面板,没有一个触发动作。说不太清楚,但是还是很容易理解的。很好意会~呵相当于是先吧元素添加好,再把面板显示出来。 而之前是先把面板显示出来,在往面板中增加元素,而增加完后没有一个触发机制。所以面板不会即时刷新。
      

  4.   

    size 调整问题setVisable 最后才调用   
      

  5.   

    swing这一块,用eclipse装一个插件 可以对控件任意的摆放,用起来很方便,可以大大缩短开发时间