下面是非常简单的一段代码,但是问题有2:
1、我希望 JPanel 不要占满 JFrame
2、我希望通过调用 setLocation() 方法来指定组件的位置
但是这个目的都没有达到,所以请教下大家(我一开始Test extends JFrame,但是不行后才另外建的一个JFrame)

public class Test{ JButton myButton = new JButton("Test");
JFrame myFrame = new JFrame();
public Test(){
Dimension size = new Dimension(50, 30);
myButton.setSize(size);
myButton.setPreferredSize(size);
myButton.setMaximumSize(size);
myButton.setMinimumSize(size);
myButton.setLocation(100, 50);
JPanel myPanel = new JPanel();
Dimension size2 = new Dimension(100, 100);
myPanel.setPreferredSize(size2);
myPanel.setSize(size2);
myPanel.setMaximumSize(size2);
myPanel.setMinimumSize(size2);
myPanel.add(myButton);
myPanel.setBackground(Color.RED);
myFrame.add(myPanel);
myFrame.setSize(300, 300);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}
public static void main(String[] args){
Test myTest = new Test();
}
}

解决方案 »

  1.   

    答:
    1)我一开始Test extends JFrame,但是不行后才。
    怎么会不行呢。当然可行啊,而且鼓励这样做。
    2)你要首先获取JFrame的getContentPane(),然后将该contentPane容器的布局管理器设置为null,这样你就可以向contentPane容器[注意不是JFrame]加入组件[大小,位置你可任意设置。]
      

  2.   

     myPanel.add(myButton, BorderLayout.center);不可以吗?楼主要解决的是什么 问题呀?
      

  3.   

    答:怎么可能呢?你的改动后的代码如下:import java.awt.*;import javax.swing.*;
    public class Test extends JFrame{
     JButton myButton = new JButton("Test");
     Container cp=this.getContentPane();  
    public Test()
    {
    cp.setLayout(null);
     Dimension size = new Dimension(50, 30);
         myButton.setSize(size);
         myButton.setPreferredSize(size);
            myButton.setMaximumSize(size);
            myButton.setMinimumSize(size);
            myButton.setLocation(100, 50);
            JPanel myPanel = new JPanel();
            Dimension size2 = new Dimension(100, 100);
            myPanel.setPreferredSize(size2);
            myPanel.setSize(size2);
            myPanel.setMaximumSize(size2);
            myPanel.setMinimumSize(size2);
            myPanel.add(myButton);
            myPanel.setBackground(Color.RED);
            myPanel.setLocation(10,10);
            cp.add(myPanel);
            this.setSize(300, 300);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);

    }
       
       
        public static void main(String[] args){
             new Test();
        }
    }
      

  4.   


    import java.awt.Color;
    import java.awt.Dimension;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test{    JButton myButton = new JButton("Test");
        JFrame myFrame = new JFrame();
        public Test(){
            Dimension size = new Dimension(50, 30);
            myButton.setSize(size);
            myButton.setPreferredSize(size);
            myButton.setMaximumSize(size);
            myButton.setMinimumSize(size);
            
            myButton.setLocation(100, 50);
            
            JPanel myPanel = new JPanel();
            myPanel.setLayout(null);
            Dimension size2 = new Dimension(200, 200);
            myPanel.setPreferredSize(size2);
            myPanel.setSize(size2);
            myPanel.setMaximumSize(size2);
            myPanel.setMinimumSize(size2);
            myPanel.add(myButton);
            myPanel.setBackground(Color.RED);
            myFrame.add(myPanel);
            myFrame.setLayout(null);
            
            myPanel.setLocation(0, 0);
            
            myFrame.setSize(300, 300);
            myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            myFrame.setVisible(true);
        }
        public static void main(String[] args){
            Test myTest = new Test();
        }
    }虽然帮你在这种方式下改好了,但是还是建议楼主用继承自Jframe的方法,毕竟这种方法不太容易控制
      

  5.   

    public class TempTest extends JFrame {
        JButton myButton = new JButton("Test");
        public TempTest(){
            Dimension size = new Dimension(50, 30);
            myButton.setSize(size);
            myButton.setPreferredSize(size);
            myButton.setMaximumSize(size);
            myButton.setMinimumSize(size);
            myButton.setLocation(100, 50);
            JPanel myPanel = new JPanel();
            Dimension size2 = new Dimension(100, 100);
            myPanel.setPreferredSize(size2);
            myPanel.setSize(size2);
            myPanel.setMaximumSize(size2);
            myPanel.setMinimumSize(size2);
            myPanel.add(myButton);
            myPanel.setBackground(Color.RED);
            myPanel.setLocation(50, 50);
            this.setLayout(null);
            add(myPanel);
            setSize(300, 300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
        public static void main(String[] args){
            TempTest myTest = new TempTest();
        }
    }
      

  6.   

    其实我想解决的问题不算什么很大的问题,就是想写的好看点,否则心里老不爽的,因为布局管理器设置的都比较尴尬,所以我想通过setLocation()来自定义组件在界面上的位置,但是我这个小小的愿望就是无法实现,哪位高手帮帮我啊~~