2014-12-15 5 views
4

이 코드는 내가 작업중인 다른 프로젝트에 대한 훨씬 더 큰 문제를 해결하기 위해 이해해야 할 바보 같은 예제입니다. 버튼이 JPanel에 추가되어야합니다. JScrollPane을 모두 함께 표시 할 수는 없으므로 JScrollPane을 추가하기로 결정했지만 이상한 일이 발생합니다. 19 개만 표시되며 이유를 이해할 수 없습니다. 크기 행렬에는 23 행에 대해 1 열이 있으므로 올바른 것입니다. 왜 이런 일이 일어나는 지 아십니까? 감사합니다자바 스윙 : JScrollPane이있는 JPanel에 추가되지 않은 구성 요소

package proveGUI; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.ScrollPaneConstants; 

import layout.TableLayout; 

public class Main { 

    public static void main(String argv[]) { 

     JFrame jframe = new JFrame("Protocollo UTL"); 
     //jframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
     jframe.setSize(1200, 450); 

     JPanel body = new JPanel(); 
     double[][] size = { 
       {0.05}, 
       {0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05} 

     }; 

     body.setLayout(new TableLayout(size)); 

     for(int i=0; i<22; i++) { 
      body.add(new JButton(String.valueOf(i)), "0,"+String.valueOf(i)); 
     } 

     JScrollPane scrollPane = new JScrollPane(body, 
       ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, 
       ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

     jframe.add(scrollPane); 
     jframe.setVisible(true); 

    } 

} 
내가했습니다 이제까지 그것을 사용하지 않았기 때문에 나는 많은 약 TableLayout를 모르는

enter image description here

+1

사용하려고'body.setLayout (새 BoxLayout에서는 (몸, BoxLayout.Y_AXIS))'대신에'TableLayout' – SeniorJD

+0

작품의'GridBagLayout' – MadProgrammer

+0

@SeniorJD : 덕분에,이 일 것으로 보인다. 차이점과 내가 실수 한 부분을 알려주시겠습니까? 그러나 문제는이 방법으로 하나의 열에 항목을 추가 할 수 있다는 것입니다. 대신 실제 프로젝트에 많은 행과 열이 있습니다. 어떻게해야할까요? –

답변

2

문제는 0.00에서 1.00 사이의 크기 값을 사용하고 있기 때문에 발생합니다. 이들은 상대적 크기/퍼센트 (이 경우 5 %)로 해석됩니다. 20 행 (0부터 19까지) 만 표시하는 이유입니다. 대신 "50.0"을 사용하면 문제가 사라집니다. 또는 TableLayout.PREFERRED을 사용하십시오.

+0

오, 정말 고마워요! 마침내 문제를 해결 한 것 같습니다. 정수 값을 사용해야한다고 생각한 적은 한번도 없었습니다. 마음으로부터 감사합니다! –

2

. 스윙을 처음 사용하는 경우 common Swing Layouts을 사용해보십시오. U'll는, 레이아웃 스윙에서 작동 방법을 이해 GridBagLayout를 사용하는 경우가 대부분 조정 레이아웃이기 때문에

사건에 대한

, 당신은 간단

body.setLayout(new BoxLayout(body, BoxLayout.Y_AXIS)); // instead of TableLayout 

을 시도 할 수 있습니다.