JFrame f=new JFrame();
f.pack();
f.setBounds(100,100,400,300);
f.show();记得要先pack再setBounds或者setSize

解决方案 »

  1.   

    参考下这个://PanelDemo.java
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class PanelDemo extends JFrame
    {
    public PanelDemo()
    {
    setTitle("Panel Demo");
    setBounds(100,100,400,300);

    Container contentPane = getContentPane();
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JButton("This is Button"),BorderLayout.SOUTH);
    contentPane.add(panel,BorderLayout.CENTER);

    addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
    }

    public static void main(String[] args)
    {
    JFrame frame = new PanelDemo();
    frame.setVisible(true);
    }
    }
      

  2.   

    还是解决不了,干脆把程序放上来,请各位诊断诊断吧
    //Physical_lab.java
    import java.awt.*;
    import java.awt.event.*;
    public class Physical_lab extends WindowAdapter implements ActionListener{
    private Frame MainFrame; //这是主窗口的引用
    public TextField tf; //状态栏
    private Panel OnShowApp; //原来在进行的实验
    public Physical_lab() { //构造方法
    MainFrame = new Frame("虚拟物理实验室"); //创造了一个主窗口
    }
    //加载窗口,添加菜单
    public void launchFrame() {
    // MainFrame.setSize(600,400);
    MainFrame.setBackground(Color.gray);
    tf = new TextField (30);  //tf用来输出调试信息
    MainFrame.add (tf, BorderLayout.SOUTH);
    MenuBar MainMenuBar=new MenuBar(); //创建菜单栏
    Menu MyMenu=new Menu("实验项目"); //创建菜单
    Menu MyHelp=new Menu ("help"); //创建帮助菜单 MenuItem Item1=new MenuItem("游标卡尺"); //创建"实验项目"菜单项
    MenuItem Item2=new MenuItem("一维碰撞");
    MenuItem Item3=new MenuItem("静电场的模拟");
    MenuItem Item4=new MenuItem("对称脉冲波的叠加");
    MenuItem Item5=new MenuItem("力的分析");
    MenuItem Item6=new MenuItem("抛体运动有趣的性质");
    MenuItem Item7=new MenuItem("彩色的影子");
    MenuItem Item9=new MenuItem("角动量守恒与等面积定律");
    MenuItem Item10=new MenuItem("虹霓现象的形成");
    MenuItem Item11=new MenuItem("两面镜子的多重反射");
    MenuItem Item14=new MenuItem("狭义相对论的时空概念");
    MenuShortcut sort= new MenuShortcut(KeyEvent.VK_X); //快捷键为Ctrl+X
    MenuItem Item8=new MenuItem("Exit",sort);
    MenuShortcut sortHelp= new MenuShortcut(KeyEvent.VK_F1);//这个快捷键为何自动变为Ctrl+P
    MenuItem Item12=new MenuItem("帮助主题",sortHelp);
    MenuItem Item13=new MenuItem("关于虚拟物理实验室...");
    /////////////////////////////////////////////////////////////
    MyMenu.add(Item1); //加载菜单项
    MyMenu.add(Item11);
    MyMenu.add(Item6);
    MyMenu.add(Item5);
    MyMenu.add(Item4);
    MyMenu.add(Item3);
    MyMenu.add(Item7);
    MyMenu.add(Item9);
    MyMenu.add(Item10);
    MyMenu.add(Item2);
    MyMenu.addSeparator();
    MyMenu.add(Item8); MyHelp.add(Item12);
    MyHelp.add(Item13); MainMenuBar.add(MyMenu); //加载菜单
    MainMenuBar.setHelpMenu(MyHelp); //加载帮助菜单
    MainFrame.setMenuBar(MainMenuBar); //加载菜单栏
    //建立事件侦听印射
    Item8.addActionListener(this);
    Item1.addActionListener(this);
    Item2.addActionListener(this);
    Item3.addActionListener(this);
    Item4.addActionListener(this);
    Item5.addActionListener(this);
    Item6.addActionListener(this);
    Item7.addActionListener(this);
    Item9.addActionListener(this);
    Item10.addActionListener(this);
    Item11.addActionListener(this);
    Item12.addActionListener(this);
    Item13.addActionListener(this);
    MainFrame.setVisible(true);
    MainFrame.setBounds(200,200,600,400);
    MainFrame.addWindowListener(new Physical_lab());
    } public static void main(String args[]) { //主函数入口
    Physical_lab MyInstans = new Physical_lab();//创建本类的一个实例
    MyInstans.launchFrame(); //加载这个窗口
    } public void windowClosing(WindowEvent e){
    System.exit(0); //按下关闭窗口按钮时关闭窗口
    } public void actionPerformed(ActionEvent e){
    //下面两句用于调试
    //String s ="e.getActionCommand="+e.getActionCommand()+"\te.paramString()="+e.paramString()
    // +"\te.getID()="+e.getID()+"\te.getModifiers()="+e.getModifiers();
       //tf.setText (s);
    if(e.getActionCommand()=="关于虚拟物理实验室..."){
    return;
    }else if(e.getActionCommand()=="帮助主题"){
    //选择了帮助菜单的帮助主题这一项
    return;
    }
       if(OnShowApp!=null){ //如果原来窗口上就有一个实验
    //先让原来的实验销毁
    tf.setText("原来的实验销毁");
    MainFrame.remove(OnShowApp); //只有这一句才能把原来的试验移除
    // OnShowApp.finalize(); //不能这样使实验销毁
    }
    if(e.getActionCommand()=="游标卡尺"){
    tf.setText("游标卡尺,注意:玩之前先改变窗口大小,看看会怎么样");
    vernier lab_1=new vernier(tf); //创建第一个实验的实例
    OnShowApp=lab_1; //把这个引用保存下来,换到下一个实验就把它删除
    // lab_1.setBounds(0,0,600,390);
    MainFrame.add("Center",lab_1); //把它加载到主窗体上
    lab_1.launch(); //并起动它
    MainFrame.setTitle("虚拟物理实验室"+"————游标卡尺");
    MainFrame.pack();
    MainFrame.setBounds(200,200,600,400);
    MainFrame.repaint();
    lab_1.repaint();
    }else if(e.getActionCommand()=="Exit"){
    System.exit(0); //在菜单上按下退出项
    }else if(e.getActionCommand()=="两面镜子的多重反射"){
    tf.setText("两面镜子的多重反射");
    }else if(e.getActionCommand()=="一维碰撞"){
    tf.setText("一维碰撞————未完成");
    MainFrame.setTitle("虚拟物理实验室"+"————一维碰撞");
    }else if(e.getActionCommand()=="对称脉冲波的叠加"){
                tf.setText("对称脉冲波的叠加————未完成");
    MainFrame.setTitle("虚拟物理实验室"+"————对称脉冲波的叠加");
            }else if(e.getActionCommand()=="力的分析"){
             tf.setText("力的分析————未完成");
    MainFrame.setTitle("虚拟物理实验室"+"————力的分析");
            }else if(e.getActionCommand()=="抛体运动有趣的性质"){
             tf.setText("抛体运动有趣的性质。注意:玩之前先改变窗口大小,看看会怎么样");
    MainFrame.setTitle("虚拟物理实验室"+"————抛体运动有趣的性质");
            }else if(e.getActionCommand()=="彩色的影子"){
             tf.setText("彩色的影子————未完成");
    MainFrame.setTitle("虚拟物理实验室"+"————彩色的影子");
            }else if(e.getActionCommand()=="静电场的模拟"){
             tf.setText("静电场的模拟。注意:玩之前先改变窗口大小,看看会怎么样");
    MainFrame.setTitle("虚拟物理实验室————静电场的模拟");
            }else if(e.getActionCommand()=="虹霓现象的形成"){
             tf.setText("虹霓现象的形成————未完成");
    MainFrame.setTitle("虚拟物理实验室————虹霓现象的形成");         
            }else if(e.getActionCommand()=="角动量守恒与等面积定律"){
             tf.setText("角动量守恒与等面积定律。注意:玩之前先改变窗口大小,看看会怎么样");
    MainFrame.setTitle("虚拟物理实验室————角动量守恒与等面积定律");
            }
    }
    }
      

  3.   

    这是其中用到的一个类
    //vernier.java
    import java.awt.*;
    import java.awt.event.*;
    class vernier extends Panel{
        int yOffset;
        TextField tField;
        double time,ts;
        boolean running,showInfo,rightClick;
        Dimension area;
        Image fgImage, bgImage, gImage;
        Graphics fg, bg, g, g0;
        int x0, y0,x,y,dx;
        Checkbox cShow;
        Color bgColor;
        String rts,STR[]={"Reset","Show","mm"},str,valStr;
        private int Xb[]={60,60,90,100,100,620,620,100,100,60};
        private int Yb[]={60,180,246,251,140,140,60,60,60,60};
        private int Xf[]={0,0,10,50,270,270,0};
        private int Yf[]={0,110,105,40,40,0,0};
        int xs,xc,xx,chy;
        FontMetrics fm;
        TextField FrameText;
        public void launch(){ //由框架调用来起动实验
            setBackground(bgColor);
            Panel panel=new Panel();
    // FrameText.setText("Button");
            panel.add(tField=new TextField("0.0",3));
            panel.add(new Label(STR[2])); //显示"mm"字样
            panel.add(new Button(STR[0])); //加"Reset"按钮
            panel.add(cShow=new Checkbox(STR[1])); //加"显示"单选框        
            area=new Dimension(600,360); //控制Panel的大小
            area.height-=yOffset;
            x0=100;
            y0=140;
    setSize(area); //不来这么一句它不出来,怪哉
            repaint();
            reset(true); //这个函数不能调,不然就不出现
            add("North",panel);
    // panel.setBackground(Color.red);
    // FrameText.setText("panel.repaint");
        }    public boolean action(Event event,Object obj){
            if(event.target instanceof Button){
    // FrameText.setText("重置"); //在父窗口上显示信息
                String s=(String)obj;
                if(s.equals(STR[0])){
                    FrameText.setText("重置");
                    reset(true);
                }
            }else if(event.target==cShow){
                FrameText.setText("显示读数");
                showInfo=cShow.getState();
                repaint();
            }else if(event.target==tField){ //接收到回车消息后,判断输入的读数是否正确
                FrameText.setText("你要试着读数了!");
                String s1=((String)obj).trim();
                g0.drawImage(gImage,0,yOffset,this);
                if(s1.equals(valStr)){
                    str="Great!you have the right answer!";
                    g0.setColor(Color.blue);
                }else{
                    g0.setColor(Color.red);
                    try{
                        float f=(float)(Double.valueOf(s1).doubleValue()-Double.valueOf(valStr).doubleValue());
                        if((double)f==0.0D)
                            str="Check number of digits.";
                        else
                            str="Difference is "+String.valueOf(f)+" mm";
                    }catch(NumberFormatException e){
                        //忽略它
                    } g0.drawString(str,(area.width-fm.stringWidth(str))/2,2*chy+yOffset);
                    str="Wrong answer!Try it again!";
                }
                g0.drawString(str,(area.width-fm.stringWidth(str))/2,chy+yOffset);
            }
            return true;
        }
        public void reset(boolean flag){
            InitClear();
            if(flag) tField.setText(" 0.0");
            valStr="0.0";
            repaint();
        }
        public boolean mouseDown(Event event, int i, int j){
            if((j-=yOffset)<0) return false;
            if(event.modifiers==4) rightClick=true;
            xs=i;
            return true;
        }
        public boolean mouseDrag(Event event,int i, int j){
            //int i=event.getX(),j=event.getY();
            if((j-=yOffset)<0) return false;
            FrameText.setText("Drag");
            xx+=i-xs;
            xs=i;
            if(xx<0){
                xx=0;
                tField.setText("0.0");
            } else{
                float f=(float)((double)xx/10D);
                valStr=String.valueOf(f);
                if(valStr.indexOf(".")==-1) str+=".0";
                if(showInfo) tField.setText(valStr);
                else tField.setText("");
            }
            repaint();
            return true;
        }
        public boolean mouseUp(Event event,int i,int j){
            if((j-=yOffset)<0) return false;
            if(rightClick) rightClick=false;
            else  running=!running;
            return true;
        }
        void InitClear(){
            if(bg==null){ //下面两句引起了错误
                gImage=createImage(area.width,area.height); //创建缓冲区
                g=gImage.getGraphics(); //得到缓冲区的图形环境,好像是这一句引起的异常
                bgImage=createImage(area.width,area.height);
                bg=bgImage.getGraphics();
                fgImage=createImage(271,130);
                fg=fgImage.getGraphics();
                fg.setColor(Color.blue);
                g0=getGraphics();
            }
            bg.clearRect(0,0,area.width,area.height);
            bg.setColor(Color.blue);
    // FrameText.setText("InitClear");
            bg.drawPolygon(Xb,Yb,10);
            int l=y0-10;
            for(int i=x0+xc;i<620;i+=10) bg.drawLine(i,y0,i,l);
            l-=5;
            for(int j=x0+xc;j<620;j+=50) bg.drawLine(j,y0,j,l);
            l-=5;
            fm=bg.getFontMetrics(); //得到当前用的字体
            chy=fm.getHeight(); //得到字体高度
            int k=x0+xc;
            for(int i1=0;k<620;i1++){
                bg.drawLine(k,y0,k,l);
                str=String.valueOf(i1*10);
                bg.drawString(str,k-fm.stringWidth(str)/2,l);
                k+=100;
            }
            fg.drawPolygon(Xf,Yf,7);
            l=10;
            int k1=fm.getHeight();
            k=xc;
            for(int j1=0;k<201;j1++){
                fg.drawLine(k,0,k,l);
                str=String.valueOf(j1);
                fg.drawString(str,k-fm.stringWidth(str)/2,l+k1);
                k+=19;
            }
            fg.drawString("0.1mm",220,1+k1);
            xx=0;
            tField.setText(" 0.0");
        }//InitClear(){
        public void paint(Graphics g1){
            update(g1);
        }
        public void update(Graphics g1){
            try{
                g.drawImage(bgImage,0,0,this);
                g.drawImage(fgImage,x0+xx,y0+1,this);
            }catch(NullPointerException e){
                    //忽略空引用异常
            }
            dx=xx-(xx/10)*10;
            if(showInfo){        //显示数值
                g.setColor(Color.red);
                g.drawLine(x=x0+xc+(xx/10)*10,y=y0-20,x,y-20); //主尺读数指针及读数
                g.drawLine(x-3,y-5,x,y);
                g.drawLine(x+3,y-5,x,y);
                str=String.valueOf(xx/10)+".0 mm";
                g.drawString(str,x-fm.stringWidth(str)/2,y-25);
                x+=dx*20;
                g.drawLine(x,y=y0+10,x,y+20); //游标读数指针及读数
                g.drawLine(x-3,y+5,x,y);
                g.drawLine(x+3,y+5,x,y);
                y+=20;
                str="0."+String.valueOf(dx)+" mm";
                g.drawString(str,x-fm.stringWidth(str)/2,y+chy+0);
                x=x0+xc+xx;
                g.drawLine(x,y0,x,y=y0-20); //游标原点指针
                g.drawLine(x-3,y+5,x,y);
                g.drawLine(x+3,y+5,x,y);
                float f=(float)((double)xx/10D);
                str=String.valueOf(f);
                if(str.indexOf(".")==-1) str+=".0";
                str+=" mm";
            }else {
                str="?";
            }
            g.setColor(Color.black);
            g.drawString(str,x-xx/2-fm.stringWidth(str)/2,Yb[3]+chy+10); //在?号处输出读数,这一句也发生空引用异常
            g.drawLine(x=Xb[3],y=Yb[3]+5,x+xx,y);
            if(xx>10){
                g.drawLine(x+5,y-3,x,y);
                g.drawLine(x+5,y+3,x,y);
                x+=xx;
                g.drawLine(x-5,y-3,x,y);
                g.drawLine(x-5,y+3,x,y);
                }
            try{
                g1.drawImage(gImage,0,yOffset,this);
            }catch(NullPointerException e){
                //忽略空引用异常
            }
        }   //update()
        public vernier(TextField tf){ //构造函数,初始化变量
            yOffset=40;
            time=0.0D;
            ts=0.0D;
            running=false;
            showInfo=false;
            bgColor=new Color(100,223,208);
            rightClick=false;
            xc=10;
            xx=0;
            FrameText=tf;
        }//vernier
    }