2017-01-26 18 views
0


私はそうのように、usernameLabel /フィールドとpasswordLabel /フィールドの表示を取得するにはGroupLayoutを使用したい:GroupLayoutが 'main in exception'エラーを出すのはなぜですか?

ユーザー名:usernameFieldの
パスワード:PASSWORDFIELD

私が使用しているコードがあります

layout.setHorizontalGroup(
      layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addComponent(usernameLabel) 
       .addComponent(usernameField) 
        ) 
       .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
        .addComponent(passwordLabel) 
        .addComponent(passwordField) 
        ) 
      ); 

     layout.setVerticalGroup(
      layout.createParallelGroup(GroupLayout.Alignment.BASELINE) 
       .addGroup(layout.createSequentialGroup() 
        .addComponent(usernameLabel) 
        .addComponent(usernameField) 
        ) 
       .addGroup(layout.createSequentialGroup() 
        .addComponent(passwordLabel) 
        .addComponent(passwordLabel) 
        ) 
      ); 

これはコンパイルされますが、次のエラーが表示されます。

Exception in thread "main" java.lang.IllegalStateException: javax.swing.JPasswordField[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,[email protected],flags=288,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=128,g=128,b=128],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=com.apple.laf.AquaImageFactory$SystemColorProxy[r=0,g=0,b=0],selectionColor=com.apple.laf.AquaImageFactory$SystemColorProxy[r=164,g=205,b=255],columns=20,columnWidth=0,command=,horizontalAlignment=LEADING,echoChar=●] is not attached to a vertical group 
    at javax.swing.GroupLayout.checkComponents(GroupLayout.java:1090) 
    at javax.swing.GroupLayout.prepare(GroupLayout.java:1040) 
    at javax.swing.GroupLayout.layoutContainer(GroupLayout.java:910) 
    at java.awt.Container.layout(Container.java:1510) 
    at java.awt.Container.doLayout(Container.java:1499) 
    at java.awt.Container.validateTree(Container.java:1695) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validate(Container.java:1630) 
    at java.awt.Container.validateUnconditionally(Container.java:1667) 
    at java.awt.Window.show(Window.java:1033) 
    at java.awt.Component.show(Component.java:1671) 
    at java.awt.Component.setVisible(Component.java:1623) 
    at java.awt.Window.setVisible(Window.java:1014) 
    at xWing.GUIlogin.<init>(GUIlogin.java:107) 
    at xWing.Driver.main(Driver.java:7) 
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: javax.swing.JPasswordField[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,[email protected],flags=288,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=128,g=128,b=128],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=com.apple.laf.AquaImageFactory$SystemColorProxy[r=0,g=0,b=0],selectionColor=com.apple.laf.AquaImageFactory$SystemColorProxy[r=164,g=205,b=255],columns=20,columnWidth=0,command=,horizontalAlignment=LEADING,echoChar=●] is not attached to a vertical group 
    at javax.swing.GroupLayout.checkComponents(GroupLayout.java:1090) 
    at javax.swing.GroupLayout.prepare(GroupLayout.java:1040) 
    at javax.swing.GroupLayout.layoutContainer(GroupLayout.java:910) 
    at java.awt.Container.layout(Container.java:1510) 
    at java.awt.Container.doLayout(Container.java:1499) 
    at java.awt.Container.validateTree(Container.java:1695) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validateTree(Container.java:1704) 
    at java.awt.Container.validate(Container.java:1630) 
    at java.awt.Window.dispatchEventImpl(Window.java:2744) 
    at java.awt.Component.dispatchEvent(Component.java:4711) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:731) 
    at java.awt.EventQueue$4.run(EventQueue.java:729) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

なぜこのエラーが発生し、どのように修正するのですか?

Resource 1:私はこれで答えに私のロジック(私はシーケンシャル/パラレルであるべきグループを決定するために使用、すなわち、グリッド・ロジック)を比較し、それ正しいとに見えました。
Resource 2

+0

これは私の意見ですが、GroupLayoutはコーディングには適していませんし、フォームエディタ用に設計されています。個人的には、他のオプションに賛成です。 – MadProgrammer

+0

@MadProgrammerありがとうございました=考慮する。 –

答えて

1

これを見てください:間違って見えます

  .addGroup(layout.createSequentialGroup() 
       .addComponent(passwordLabel) 
       .addComponent(passwordLabel) 
       ) 

を。なぜラベルを2回追加するのですか?

これらのうちの1つがpasswordFieldであると想定される場合、垂直グループにアタッチされていないPasswordTextオブジェクトが例外に記載されている理由が説明されます。

1

JPasswordField ... is not attached to a vertical groupは、垂直グループには付けられていないことを明確に示しています。

あなたはここにタイプミスしている:

 .addGroup(layout.createSequentialGroup() 
      .addComponent(passwordLabel) 
      .addComponent(passwordLabel) 
      ) 

使用してグループのレイアウトができるトリッキーで。私の経験では、非常に良いのようなSwingアプリケーションのためにサードパーティのレイアウトマネージャを使用する方が簡単であることが分かりましたMigLayoutこれは多くのドキュメントを持ち、使いやすいです。やってみて。

+0

+1。両方の回答を選択できませんでした。ネクタイを壊すために最も古い答えを受け入れた。コメントしてくれてありがとう、そしてMigLayoutをチェックします。 –

関連する問題