初学swing 用布局管理器总是不能把控件放到想要的地方去 研究了半天 发现可以setLayout(null) JFrame上setLayout(null)再添加其它控件 还正常 但是JPanel上setLayout(null) 里面的控件就不显示了 为什么 怎么解决阿

解决方案 »

  1.   

    在JPanel上setLayout(new BorderLayout());
      

  2.   


    /*
     * 以下代码在 Windows XP + JDK 5 测试通过,2008年11月15日,oracle_lover
     * 关键之处在于,如果 JPanel 的 Layout 为 null,其父容器的 Layout 也要为 null
     * 各组件需要用 setPreferredSize() 自定义大小,用 setBounds() 自定义位置
     */
    import java.awt.Dimension;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class LayoutTest extends JFrame {  private static final long serialVersionUID = -8655534928921913270L;  public LayoutTest() {
        super("Java Test");    this.setSize(640, 480); // 设置窗口大小
        this.setLocationRelativeTo(null); // 窗口屏幕居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 窗口关闭,则程序退出
        java.awt.Container container = this.getContentPane();    // 创建一个 JPanel,且 Layout 为 null
        JPanel paneTop = new JPanel();
        paneTop.setLayout(null);    // 创建相应组件,首先各组件要自己用 setPreferredSize()定义大小,
        // 然后用 setBounds() 设定位置
        JLabel lb = new JLabel("测试文本:");
        Dimension dim1 = new Dimension(100, 20);
        lb.setPreferredSize(dim1);
        lb.setBounds(12, 12, dim1.width, dim1.height);
        JTextField tf = new JTextField();
        Dimension dim2 = new Dimension(100, 20);
        tf.setPreferredSize(dim2);
        tf.setBounds(140, 12, dim2.width, dim2.height);
        paneTop.add(lb);
        paneTop.add(tf);    // 要想让 Layout 为 null 的 JPanel 显示,其父容器的 Layout 也必须为 null
        // 同样,这个 JPanel 要自定义大小和位置
        container.setLayout(null);
        Dimension dim0 = new Dimension(300, 40);
        paneTop.setBounds(0, 0, dim0.width, dim0.height);
        container.add(paneTop);
      }  // 创建GUI
      private static void createAndShowGUI() {
        LayoutTest xframe = new LayoutTest();
        xframe.setVisible(true);
      }  public static void main(String[] args) {
        // 为事件处理线程安排一个任务:创建并显示程序的GUI
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            createAndShowGUI();
          }
        });
      }}
      

  3.   

    这个得自己慢慢调试
    关键注意
    container.setLayout(null);