各位大侠,我是初学Java的一只小菜鸟,遇到一个问题无法解决,特来请教,望大家指点迷津,谢谢!
问题如下:
我定义了两个类:
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Command extends JPanel{
    protected JButton bstart;
    protected JButton bexit;
    protected JButton brealign;
    protected JButton brestart;
    protected JPanel p,panel;
    public Command(){
        bstart=new JButton("开始");
        bexit=new JButton("退出");
        brealign=new JButton("重列");
        brestart=new JButton("重玩");
        p=new JPanel();
        panel=new JPanel();
        panel.add(bstart);
        panel.add(bexit);
        panel.add(brealign);
        panel.add(brestart);
        p.add(panel);
        panel.setSize(675, 80);
        panel.setLayout(new GridLayout());
        p.setBounds(100, 100, 900, 100);
        p.setVisible(true);
    }
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainInterface extends JFrame{
    private BorderLayout b1=new BorderLayout();
    private JFrame mf;
    private JPanel p1,p2,p3;
    private Command com;
    public MainInterface(){
        mf=new JFrame();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(200, 200, 900, 500);
        com=new Command();
         p1=new JPanel();
        p2=new JPanel();
        p3=new JPanel();
        p1.setBackground(Color.PINK);
        p2.setBackground(Color.YELLOW);
        p3.setBackground(Color.lightGray);
        final Container c=getContentPane();
        p1.add(com.p);
        c.add("North",p1);
        c.add("East", p2);
        c.add("Center",p3);
        setVisible(true);
    }
    public static void main(String[] args){
        MainInterface mi=new MainInterface();
    }
}我的要的效果是把Command的JPanel p 按原来设置的大小显示在MainInterface的JFrame mf上,可是事情并不如我愿,mf上显示的P总是很小,试了多种方法没成功,包括在MainInterface上重设p的大小也没有用,请问有没有什么办法解决这个问题? 

解决方案 »

  1.   

    把Command.java这个类里面的p.setBounds(100, 100, 900, 100); 
    改成 p.setPreferredSize(new Dimension(200,30));就可以了。
    完整代码如下:
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    public class Command extends JPanel{
        protected JButton bstart;
        protected JButton bexit;
        protected JButton brealign;
        protected JButton brestart;
        protected JPanel p,panel;
        public Command(){
            bstart=new JButton("开始");
            bexit=new JButton("退出");
            brealign=new JButton("重列");
            brestart=new JButton("重玩");
            p=new JPanel();
            panel=new JPanel();
            panel.add(bstart);
            panel.add(bexit);
            panel.add(brealign);
            panel.add(brestart);
            p.add(panel);
            panel.setSize(675, 80);
            panel.setLayout(new GridLayout());
            p.setPreferredSize(new Dimension(200,30));//设置此组件的首选大小
            p.setVisible(true);
        }
    }
      

  2.   

    谢谢,设置大小的问题终于解决了。我做了一下扩展练习,有了个新问题,代码如下:
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.GridLayout;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    public class Command extends JPanel{
        protected JButton bstart;
        protected JButton bexit;
        protected JButton brealign;
        protected JButton brestart;
        protected JPanel p,panelone,paneltwo;
        protected JLabel label;
        public Command(){
            bstart=new JButton("开始");
            bexit=new JButton("退出");
            brealign=new JButton("重列");
            brestart=new JButton("重玩");
            label=new JLabel("初学Java");
            label.setFont(new Font("初学Java",1,20));
            p=new JPanel();
            panelone=new JPanel();
            paneltwo=new JPanel();
            panelone.add(bstart);
            panelone.add(bexit);
            panelone.add(brealign);
            panelone.add(brestart);
            paneltwo.add(label);
            p.add(panelone);
            p.add(paneltwo);
            panelone.setPreferredSize(new Dimension(675,80));
            paneltwo.setPreferredSize(new Dimension(225,80));
            panelone.setLayout(new GridLayout());
            p.setPreferredSize(new Dimension(900,100));
            p.setVisible(true);
        }
    }运行MainInterface的时候,只显示了panelone,而paneltwo没有显示,若将paneltwo.setPreferredSize(new Dimension(225,80))这行代码注释掉,则panelone、paneltwo都能显示,但是并不是按照我设置的大小来显示,这是为什么呢?有什么办法解决这个问题呢?继续请教各位大侠,谢谢......
      

  3.   

    解决了没有??
    你设置的paneltwo的大小太大了。设置小点就可以了。
    paneltwo.setPreferredSize(new Dimension(200,80));