【问题标题】:adding jpanels over split pane in java在java中的拆分窗格上添加jpanels
【发布时间】:2012-12-25 08:54:58
【问题描述】:

我正在尝试在一个 JFrame 表单上添加三个面板。如果我只添加三个面板,它们将被显示,但如果我在拆分窗格上添加面板,则不会显示任何内容 提示以下代码中的错误

 import javax.swing.*;
 import java.awt.*;
 class paneltest extends JFrame{
 paneltest()
 {
   Container cp=this.getContentPane();
   cp.setLayout(null);
   panel1 p1= new panel1();
   panel2 p2= new panel2();
   panel3 p3= new panel3();
   cp.add(p1);
   cp.add(p2);
   cp.add(p3);
   Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();

   p1.setBounds(0,0,screenSize.width/3,screenSize.height);
   p2.setBounds(screenSize.width/3,0,screenSize.width/3,screenSize.height);
   p3.setBounds(2*(screenSize.width/3),0,screenSize.width/3,screenSize.height); 

   try{

       JSplitPane splitPaneLeft = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
       JSplitPane splitPaneRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        splitPaneLeft.setLeftComponent( p1 );
        splitPaneLeft.setRightComponent( p2 );
        splitPaneRight.setLeftComponent( splitPaneLeft );
        splitPaneRight.setRightComponent( p3 );

        JPanel panelSplit = new JPanel();
        panelSplit.add(splitPaneRight);
        cp.add(panelSplit);
       panelSplit.setVisible(true);
       }
    catch(Exception ex)
    {

     JOptionPane.showMessageDialog(null,"exception occured"+ex);   

     }
   }
     public static void main(String arsg[])
    {

       paneltest frm= new paneltest();
       frm.show ();

       }

       }
       class panel1 extends JPanel
        {
        panel1()
           {
           setLayout(new FlowLayout());
           JLabel l1= new JLabel("panel1");
           add(l1);


           }    

           }

         class panel2 extends JPanel
        { 
         panel2()
           {
           setLayout(new FlowLayout());
           JLabel l1= new JLabel("panel2");
          add(l1);

           }    

         }
      class panel3 extends JPanel
       {
       panel3()
        {
          setLayout(new FlowLayout());
          JLabel l1= new JLabel("panel3");
          add(l1);


         }    

        }

【问题讨论】:

  • 1) 此代码在cp.setLayout(null); 处开始下坡使用布局! 2) 对代码块使用一致且合乎逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。

标签: java swing jpanel jsplitpane


【解决方案1】:

删除cp.setLayout(null) 行。这将解决最初的问题。

之后:

  • 缩进代码
  • 尊重 Java 命名约定
  • 如果您随后将面板添加到拆分窗格,请不要将它们添加到内容窗格。可以将组件添加到单个父级。将它们添加到两者没有意义
  • 不要使用setBounds()。这就是布局管理器的作用
  • 不要扩展 JPanel 和 JFrame。使用它们
  • 尊重Swing's threading policy
  • 不要catch (Exception)

【讨论】:

  • 因为我删除了 setLayout(null) 并且也没有在容器上添加面板,所以面板正在显示但它们无法调整大小。
  • 这是因为panelSplit 面板使用了 FlowLayout(默认情况下)。让它使用 BorderLayout,splitpane 将占用其中的所有可用空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2020-05-25
  • 2013-02-08
相关资源
最近更新 更多