2014-10-19 1 views
0

GroupLayout을 만들려고하지만 컴파일 할 때마다 오류가 발생합니다. 내 코드에서 잘못된 라인을 찾을 수 없다. 나는 정확하다고 생각한다. 이러한 오류가 발생하는 이유는 무엇입니까?GroupLayout 오류 : 내 코드에서 잘못된 행을 찾을 수 없습니다.

mem_settings = new JPanel(); 

    lbl_mem_settings = new JLabel("Memory settings"); 
    lbl_mem_select = new JLabel("Type"); 
    cb_mem_select = new JComboBox(new String[] {"24C01","24C02","24C04"}); 


    // Layout 
    GroupLayout GL = new GroupLayout(mem_settings); 
    mem_settings.setLayout(GL); 
    GL.setAutoCreateGaps(true); 
    GL.setAutoCreateContainerGaps(true); 

    GL.setHorizontalGroup(GL.createSequentialGroup() 
     .addGroup(GL.createParallelGroup(LEADING) 
      .addComponent(lbl_mem_settings) 
      .addComponent(lbl_mem_select)) 
     .addGroup(GL.createParallelGroup(LEADING) 
      .addComponent(cb_mem_select)) 
    ); 
    GL.setVerticalGroup(GL.createSequentialGroup() 
     .addGroup(GL.createParallelGroup(BASELINE) 
      .addComponent(lbl_mem_settings)) 
     .addGroup(GL.createParallelGroup(BASELINE) 
      .addComponent(lbl_mem_settings) 
      .addComponent(cb_mem_select)) 
    ); 

    add(mem_settings); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    pack(); 
    setVisible(true); 

및 오류가 나는 얻을 :

생성자의 코드 (JFrame의 확장)

run: 
Exception in thread "main" java.lang.IllegalStateException: javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=Type,verticalAlignment=CENTER,verticalTextPosition=CENTER] 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.preferredLayoutSize(GroupLayout.java:878) 
    at java.awt.Container.preferredSize(Container.java:1794) 
    at java.awt.Container.getPreferredSize(Container.java:1778) 
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1661) 
    at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719) 
    at java.awt.Container.preferredSize(Container.java:1794) 
    at java.awt.Container.getPreferredSize(Container.java:1778) 
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1661) 
    at javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:920) 
    at java.awt.Container.preferredSize(Container.java:1794) 
    at java.awt.Container.getPreferredSize(Container.java:1778) 
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1661) 
    at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719) 
    at java.awt.Container.preferredSize(Container.java:1794) 
    at java.awt.Container.getPreferredSize(Container.java:1778) 
    at java.awt.Window.pack(Window.java:809) 
    at memcryp.GUI.<init>(GUI.java:46) 
    at memcryp.MEMCRYP.main(MEMCRYP.java:20) 
BUILD STOPPED (total time: 6 minutes 39 seconds) 
+0

"* 내 코드에서 잘못된 행을 찾을 수 없습니다."- 오류 메시지 문제를 기반으로하는 것은'memcryp.GUI' 클래스의 46 번째 줄에 있습니다. 'memcryp.MEMCRYP' 클래스의'main' 메쏘드에서 20 번째 라인에서 호출 된 생성자의 일부 여야합니다. – Pshemo

답변

1

오류 메시지가 그래도 분명하다. 귀하의 JLabellbl_mem_select 만 수평 그룹에 연결된 전화 :

GL.setHorizontalGroup(GL.createSequentialGroup() 
     .addGroup(GL.createParallelGroup(LEADING) 
      .addComponent(lbl_mem_settings) 
      .addComponent(lbl_mem_select)) //here you attach the label 
     .addGroup(GL.createParallelGroup(LEADING) 
      .addComponent(cb_mem_select)) 
    ); 

그러나, 당신의 수직 그룹에이 라벨을 포함하지 않았다. 세로 그룹의 코드를

GL.setVerticalGroup(GL.createSequentialGroup() 
     .addGroup(GL.createParallelGroup(BASELINE) 
      .addComponent(lbl_mem_settings) 
      .addComponent(lbl_mem_select)) //add this line 
     .addGroup(GL.createParallelGroup(BASELINE) 
      .addComponent(lbl_mem_settings) 
      .addComponent(cb_mem_select)) 
    ); 

으로 변경해야합니다.

그 말은 ... UI를 직접 코드화하려면 GroupLayout을 사용하고 싶습니까? GroupLayout 튜토리얼

GroupLayout is a layout manager that was developed for GUI builders such as Matisse, the GUI builder provided with the NetBeans IDE

그것과 레이아웃을 코드를 손 수 있지만 한 말을 인용, 그것을 할 수있는 (읽을 이럴) 코드를 꽤 많이 필요합니다. 레이아웃을 수작업으로 처리하는 데 더 적합한 다른 (타사) 레이아웃 관리자가 있습니다.

+0

고마워요! 변경 후 그것은 작동합니다. – Jojojoppe

+2

문제 해결에 도움이된다면 [답변에 동의하십시오] (http://meta.stackexchange.com/a/5235/155831)를 입력하십시오. –

관련 문제