0

JPanelフレームに複数の s を追加して、それぞれに a を使用させようとしていますGroupLayoutが、何らかの理由で取得するNullPointerExceptionException、スレッドのメインで使用します。何が間違っている可能性があり、どうすれば修正できますか?

次にglayout2 = new GroupLayout(temp2Panel); temp2Panel.setLayout(glayout2); glayout2.setAutoCreateGaps(true); glayout2.setAutoCreateContainerGaps(true);、grouplayout を使用して 2 番目のパネルを作成し、同じフレームに表示しますか?

    public class test extends JFrame {
   /**
    * 
    */
   private JLabel testing;

   private JLabel lblcode;
   private JLabel lblemployeedetails;
   private JLabel lblname;
   private JLabel lbladdress;
   private JLabel lblcity;
   private JLabel lblemail;
   private JLabel lbltelnumber;
   private JLabel lblcellnumber;

   private JLabel lblprnumber;
   private JLabel lblppe;
   private JLabel lblppedate;
   private JTextField txtprnumber;
   private JTextField txtppe;

   private JTextField txtcode;
   private JTextField txtname;
   private JTextField txtaddress;
   private JTextField txtaddress2;
   private JTextField txtcity;
   private JTextField txtemail;
   private JTextField txttelnumber;
   private JTextField txtcellnumber;

   private Container container1;
   private Container container2;

   private static final long serialVersionUID = 6666;

   private JPanel mainPanel = new JPanel();
   private JPanel temp1Panel = new JPanel();
   private JPanel temp2Panel = new JPanel();

   private GroupLayout glayout;

   public test() {
      // Frame Parameters
      setTitle("test");
      setSize(500,500);// Adjust size of the frame/window
      setLocationRelativeTo(null);// Adjust open location



      addWindowListener(new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
            System.exit(0);
         }
      });
/*************************************************************
 *  Properties~Always initialize within the constructor FOOL
*************************************************************/     
      testing = new JLabel("testing");

      lblcode= new JLabel("Code:");
      lblemployeedetails= new JLabel("Employee Details:");
      lblname= new JLabel("Name:");
      lbladdress= new JLabel("Address:");
      lblcity= new JLabel("City:");
      lblemail= new JLabel("Email:");
      lbltelnumber= new JLabel("Tel:");
      lblcellnumber= new JLabel("Cell:");
      lblprnumber = new JLabel("PR#:");
      lblppe = new JLabel("PPE:");
      lblppedate = new JLabel("PPE Date:");

      txtprnumber= new JTextField();
      txtppe= new JTextField();
      txtcode= new JTextField();
      txtname= new JTextField();
      txtaddress= new JTextField();
      txtaddress2= new JTextField();
      txtcity= new JTextField();
      txtemail= new JTextField();
      txttelnumber= new JTextField();
      txtcellnumber= new JTextField();
      //Below adding the 2 other panels to the main outer panel
      temp1Panel = new JPanel();
         temp1Panel.add(container1);
      temp2Panel = new JPanel();
      mainPanel = new JPanel();
         mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
         mainPanel.add(temp1Panel);
         mainPanel.add(temp2Panel);

/*************************************************************
 *               GroupLayout for temp1Panel
*************************************************************/

      container1 = getContentPane();
      glayout = new GroupLayout(temp1Panel);
      temp1Panel.setLayout(glayout);
      glayout.setAutoCreateGaps(true);
      glayout.setAutoCreateContainerGaps(true);


      glayout.setHorizontalGroup(
         glayout.createSequentialGroup()
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(lblprnumber)
               .addComponent(lblcode)
               .addComponent(lblname)
               .addComponent(lbladdress)
               .addComponent(lblcity)
               .addComponent(lblemail)
               .addComponent(lbltelnumber)
               .addComponent(lblcellnumber))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(txtprnumber)
               .addComponent(txtcode)
               .addComponent(txtname)
               .addComponent(txtaddress)
               .addComponent(txtaddress2)
               .addComponent(txtcity)
               .addComponent(txtemail)
               .addComponent(txttelnumber)
               .addComponent(txtcellnumber))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(lblppe))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(txtppe)
               .addComponent(lblemployeedetails))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(lblppedate))
      );

      glayout.setVerticalGroup(
         glayout.createSequentialGroup()
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblprnumber)
               .addComponent(txtprnumber)
               .addComponent(lblppe)
               .addComponent(txtppe)
               .addComponent(lblppedate))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblcode)
               .addComponent(txtcode)
               .addComponent(lblemployeedetails))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblname)
               .addComponent(txtname))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lbladdress)
               .addComponent(txtaddress))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(txtaddress2))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblcity)
               .addComponent(txtcity))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblemail)
               .addComponent(txtemail))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lbltelnumber)
               .addComponent(txttelnumber))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblcellnumber)
               .addComponent(txtcellnumber))


      );

      this.setVisible(true);

   }//test

/*************************************************************
 *    Main 
*************************************************************/

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

      }//main

}

編集3:これは私が得るものです:

Exception in thread "main" java.lang.IllegalArgumentException: GroupLayout can only be used with one Container at a time
    at javax.swing.GroupLayout.checkParent(Unknown Source)
    at javax.swing.GroupLayout.invalidateLayout(Unknown Source)
    at java.awt.Container.invalidate(Unknown Source)
    at java.awt.Component.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at javax.swing.JRootPane.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at java.awt.Window.addNotify(Unknown Source)
    at java.awt.Frame.addNotify(Unknown Source)
    at java.awt.Window.show(Unknown Source)
    at java.awt.Component.show(Unknown Source)
    at java.awt.Component.setVisible(Unknown Source)

編集4:

public class test extends JFrame {
   private static final int COLS = 30;
   /**
    * 
    */
   private JLabel testing;

   private JLabel lblcode;
   private JLabel lblemployeedetails;
   private JLabel lblname;
   private JLabel lbladdress;
   private JLabel lblcity;
   private JLabel lblemail;
   private JLabel lbltelnumber;
   private JLabel lblcellnumber;

   private JLabel lblprnumber;
   private JLabel lblppe;
   private JLabel lblppedate;
   private JTextField txtprnumber;
   private JTextField txtppe;

   private JTextField txtcode;
   private JTextField txtname;
   private JTextField txtaddress;
   private JTextField txtaddress2;
   private JTextField txtcity;
   private JTextField txtemail;
   private JTextField txttelnumber;
   private JTextField txtcellnumber;

   private static final long serialVersionUID = 6666;

   private JPanel mainPanel = new JPanel();
   private JPanel temp1Panel = new JPanel();
   private JPanel temp2Panel = new JPanel();

   private GroupLayout glayout;
   private GroupLayout glayout2;

   public test() {
      // Frame Parameters
      setTitle("test");
      setSize(500,500);// Adjust size of the frame/window
      setLocationRelativeTo(null);// Adjust open location



      addWindowListener(new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
            System.exit(0);
         }
      });
/*************************************************************
 *  Properties~Always initialize within the constructor FOOL
*************************************************************/
      testing = new JLabel("test");

      lblcode = new JLabel("Code:");
      lblemployeedetails = new JLabel("Employee Details:");
      lblname = new JLabel("Name:");
      lbladdress = new JLabel("Address:");
      lblcity = new JLabel("City:");
      lblemail = new JLabel("Email:");
      lbltelnumber = new JLabel("Tel:");
      lblcellnumber = new JLabel("Cell:");
      lblprnumber = new JLabel("PR#:");
      lblppe = new JLabel("PPE:");
      lblppedate = new JLabel("PPE Date:");

      txtprnumber = new JTextField(COLS);
      txtppe = new JTextField(COLS);
      txtcode = new JTextField(COLS);
      txtname = new JTextField(COLS);
      txtaddress = new JTextField(COLS);
      txtaddress2 = new JTextField(COLS);
      txtcity = new JTextField(COLS);
      txtemail = new JTextField(COLS);
      txttelnumber = new JTextField(COLS);
      txtcellnumber = new JTextField(COLS);
      //Below adding the 2 other panels to the main outer panel
      temp1Panel = new JPanel();
      temp2Panel = new JPanel();
      mainPanel = new JPanel();
         mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
         mainPanel.add(temp1Panel);
         mainPanel.add(temp2Panel);
/*************************************************************
 *               GroupLayout for temp1Panel
*************************************************************/

      getContentPane().add(temp1Panel);//mainPanel

      glayout = new GroupLayout(temp1Panel);
      temp1Panel.setLayout(glayout);
      glayout.setAutoCreateGaps(true);
      glayout.setAutoCreateContainerGaps(true);   

      glayout.setHorizontalGroup(
         glayout.createSequentialGroup()
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(lblprnumber)
               .addComponent(lblcode)
               .addComponent(lblname)
               .addComponent(lbladdress)
               .addComponent(lblcity)
               .addComponent(lblemail)
               .addComponent(lbltelnumber)
               .addComponent(lblcellnumber))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(txtprnumber)
               .addComponent(txtcode)
               .addComponent(txtname)
               .addComponent(txtaddress)
               .addComponent(txtaddress2)
               .addComponent(txtcity)
               .addComponent(txtemail)
               .addComponent(txttelnumber)
               .addComponent(txtcellnumber))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(lblppe))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(txtppe)
               .addComponent(lblemployeedetails))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
               .addComponent(lblppedate))
      );

      glayout.setVerticalGroup(
         glayout.createSequentialGroup()
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblprnumber)
               .addComponent(txtprnumber)
               .addComponent(lblppe)
               .addComponent(txtppe)
               .addComponent(lblppedate))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblcode)
               .addComponent(txtcode)
               .addComponent(lblemployeedetails))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblname)
               .addComponent(txtname))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lbladdress)
               .addComponent(txtaddress))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(txtaddress2))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblcity)
               .addComponent(txtcity))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblemail)
               .addComponent(txtemail))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lbltelnumber)
               .addComponent(txttelnumber))
            .addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
               .addComponent(lblcellnumber)
               .addComponent(txtcellnumber))

      );

      getContentPane().add(temp2Panel);

      glayout2 = new GroupLayout(temp2Panel);
      temp1Panel.setLayout(glayout2);
      glayout2.setAutoCreateGaps(true);
      glayout2.setAutoCreateContainerGaps(true);  

      glayout2.setHorizontalGroup(
            glayout2.createSequentialGroup()
               .addGroup(glayout2.createParallelGroup(GroupLayout.Alignment.LEADING)
                  .addComponent(testing))

      );

      glayout2.setVerticalGroup(
            glayout2.createSequentialGroup()
               .addGroup(glayout2.createParallelGroup(GroupLayout.Alignment.BASELINE)
                  .addComponent(testing))

      );






      this.setVisible(true);

   }//test

/*************************************************************
 *    Main 
*************************************************************/

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

      }//main

}
4

2 に答える 2

4

NPE をスローする行は、何が問題なのかを正確に教えてくれます。

  temp1Panel.add(container1);

初期化される前に、コンポーネント container1 を使用しようとしています。

提案:

  • これをしないでください。変数を使用する前に、まず変数を初期化します。
  • 例外を一掃するのではなく、例外を批判的に読み、それらをスローする行を研究してください。そうすることで、将来多くの時間を節約できます。
  • 将来、例外に関するサポートが必要な場合は、必ず例外のスタック トレースを投稿// **** NullPointerException here ****し、投稿したコードにわかりやすいコメントを付けてください。
  • あなたのコードは少し奇妙です。コンポーネントの 1 つに contentPane を追加しているように見えますが、その逆である必要があります。コンパイルされた場合、書かれたコードはコンポーネントを表示しません
  • そして、私はSageに同意します.GroupLayoutは手作業でコーディングするのが難しいですが、そうは言っても、不可能ではなく、以前に使用したことがあります.

編集

  • 何もしないので、container1 変数も必要ありません。本質的に、それはあなたを台無しにし、価値を提供していないので、それを取り除きます.

いくつかの変更を加えたコード:

import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame {
   private static final long serialVersionUID = 6666;
   private static final int COLS = 10;

   private JLabel lblcode;
   private JLabel lblemployeedetails;
   private JLabel lblname;
   private JLabel lbladdress;
   private JLabel lblcity;
   private JLabel lblemail;
   private JLabel lbltelnumber;
   private JLabel lblcellnumber;

   private JLabel lblprnumber;
   private JLabel lblppe;
   private JLabel lblppedate;
   private JTextField txtprnumber;
   private JTextField txtppe;

   private JTextField txtcode;
   private JTextField txtname;
   private JTextField txtaddress;
   private JTextField txtaddress2;
   private JTextField txtcity;
   private JTextField txtemail;
   private JTextField txttelnumber;
   private JTextField txtcellnumber;

   private JPanel mainPanel = new JPanel();
   private JPanel temp1Panel = new JPanel();
   private JPanel temp2Panel = new JPanel();

   private GroupLayout glayout;

   public Test() {
      // Frame Parameters
      setTitle("test");
      // !! setSize(500, 500);// Adjust size of the frame/window
      // !! setLocationRelativeTo(null);// Adjust open location

      addWindowListener(new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
            System.exit(0);
         }
      });
      // !! testing = new JLabel("testing");

      lblcode = new JLabel("Code:");
      lblemployeedetails = new JLabel("Employee Details:");
      lblname = new JLabel("Name:");
      lbladdress = new JLabel("Address:");
      lblcity = new JLabel("City:");
      lblemail = new JLabel("Email:");
      lbltelnumber = new JLabel("Tel:");
      lblcellnumber = new JLabel("Cell:");
      lblprnumber = new JLabel("PR#:");
      lblppe = new JLabel("PPE:");
      lblppedate = new JLabel("PPE Date:");

      // !! add COLS column size field
      txtprnumber = new JTextField(COLS);
      txtppe = new JTextField(COLS);
      txtcode = new JTextField(COLS);
      txtname = new JTextField(COLS);
      txtaddress = new JTextField(COLS);
      txtaddress2 = new JTextField(COLS);
      txtcity = new JTextField(COLS);
      txtemail = new JTextField(COLS);
      txttelnumber = new JTextField(COLS);
      txtcellnumber = new JTextField(COLS);
      temp1Panel = new JPanel();

      // add before using:
      // !! container1 = getContentPane(); // !!
      // !! temp1Panel.add(container1);
      temp2Panel = new JPanel();
      mainPanel = new JPanel();
      mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
      mainPanel.add(temp1Panel);
      mainPanel.add(temp2Panel);

      getContentPane().add(mainPanel); // !!

      glayout = new GroupLayout(temp1Panel);
      temp1Panel.setLayout(glayout);
      glayout.setAutoCreateGaps(true);
      glayout.setAutoCreateContainerGaps(true);

      glayout
            .setHorizontalGroup(glayout
                  .createSequentialGroup()
                  .addGroup(
                        glayout
                              .createParallelGroup(
                                    GroupLayout.Alignment.LEADING)
                              .addComponent(lblprnumber).addComponent(lblcode)
                              .addComponent(lblname).addComponent(lbladdress)
                              .addComponent(lblcity).addComponent(lblemail)
                              .addComponent(lbltelnumber)
                              .addComponent(lblcellnumber))
                  .addGroup(
                        glayout
                              .createParallelGroup(
                                    GroupLayout.Alignment.LEADING)
                              .addComponent(txtprnumber).addComponent(txtcode)
                              .addComponent(txtname).addComponent(txtaddress)
                              .addComponent(txtaddress2).addComponent(txtcity)
                              .addComponent(txtemail)
                              .addComponent(txttelnumber)
                              .addComponent(txtcellnumber))
                  .addGroup(
                        glayout.createParallelGroup(
                              GroupLayout.Alignment.LEADING).addComponent(
                              lblppe))
                  .addGroup(
                        glayout
                              .createParallelGroup(
                                    GroupLayout.Alignment.LEADING)
                              .addComponent(txtppe)
                              .addComponent(lblemployeedetails))
                  .addGroup(
                        glayout.createParallelGroup(
                              GroupLayout.Alignment.LEADING).addComponent(
                              lblppedate)));

      glayout.setVerticalGroup(glayout
            .createSequentialGroup()
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lblprnumber).addComponent(txtprnumber)
                        .addComponent(lblppe).addComponent(txtppe)
                        .addComponent(lblppedate))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lblcode).addComponent(txtcode)
                        .addComponent(lblemployeedetails))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lblname).addComponent(txtname))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lbladdress).addComponent(txtaddress))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(txtaddress2))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lblcity).addComponent(txtcity))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lblemail).addComponent(txtemail))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lbltelnumber).addComponent(txttelnumber))
            .addGroup(
                  glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(lblcellnumber)
                        .addComponent(txtcellnumber))

      );

      pack(); // !!
      setLocationRelativeTo(null); // !!
      this.setVisible(true);

   }

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

   }

}

編集 2 質問の編集について、

次に、glayout2 = new GroupLayout(temp2Panel); を実行しますか? temp2Panel.setLayout(glayout2); glayout2.setAutoCreateGaps(真); glayout2.setAutoCreateContainerGaps(真); grouplayout で 2 番目のパネルを作成し、同じフレームに表示するには?

確かに、それはうまくいくかもしれません。試してみるとどうなりますか?


編集 3
例外スタック トレースは、1 つの GroupLayout を複数のコンテナーに追加しようとしていることを示しています。しかし、投稿されたコードはこの問題を反映していません。上記の例外を生成するコードを含む、最新のものの最後に別の編集を追加してください。

于 2013-11-21T18:24:40.910 に答える