2014-04-24 2 views
0

개발중인 프로그램의 GUI를 포맷하는 데 문제가 있습니다. 그 위에 JList가있는 네 개의 버튼이 있어야합니다. 내 JList는 위 버튼 대신 모든 버튼을 표시합니다. 아무도 내 문제를 해결하기 위해 올바른 방향으로 나를 가리킬 수 있습니까?Java JList GUI 서식 지정

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 


public class Test extends JPanel { 

    private static final long serialVersionUID = 1L; 

    private JList jlist; 

    public static void main(String[] args) { 
     JFrame boxOptions = new JFrame("Calculator"); 
     boxOptions.setSize(0,0); 
     boxOptions.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     boxOptions.setResizable(false); 
     boxOptions.setLayout(new BorderLayout()); 
     boxOptions.add(new Test(), BorderLayout.CENTER); 
     boxOptions.pack(); 
     boxOptions.setLocationRelativeTo(null); 
     boxOptions.setVisible(true); 

    } 

    public Test(){ 
     setLayout(new GridLayout(1, 4, 5, 5)); 

     add(new JButton("add")); 
     add(new JButton("Check In")); 
     add(new JButton("Check Out")); 
     add(new JButton("Delete")); 


     String[] Titles = {"one", "two", "three"}; 
     jlist = new JList(Titles); 
     jlist.setVisibleRowCount(3); 
     add(new JScrollPane(jlist), BorderLayout.NORTH); 

    } 

} 
+0

JList를 추가 할 때부터 JList를 표시해서는 안되며, JScrollPane을 GUI에 추가되지 않은 JPanel 인 p2에 표시해야합니다. 실제로 문제를 일으키는 코드를 Google에 알려주십시오. –

+0

죄송합니다. 저는 잠시 동안 이것에 얽매 였고 문제를 경험하고 코드를 게시 할 때 사소한 변경을가했습니다. 코드가 편집되었습니다. – YellowSoloCup

답변

1

우선 BorderLayout 매개 변수는 레이아웃이 BorderLayout 인 경우에만 사용됩니다. 대신 GridBagLayout을 사용할 수 있습니다. 샘플 코드는 다음과 같습니다

setLayout(new GridBagLayout()); 

    add(new JButton("add"), new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
    add(new JButton("Check In"), new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
    add(new JButton("Check Out"), new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
    add(new JButton("Delete"), new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 


    String[] Titles = {"one", "two", "three"}; 
    jlist = new JList(Titles); 
    jlist.setVisibleRowCount(3); 
    add(new JScrollPane(jlist), new GridBagConstraints(0, 0, 4, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 

예상하셨습니까?

2

당신은 BorderLayout.NORTH 지정자 사용하여에 구성 요소를 추가하려고 다음 GridLayout과에 시험 인 JPanel 클래스의 레이아웃을 설정하고있어 - 그 지정자 만의 BorderLayout 작동으로 정결하지 않고 테스트 JPanel을 사용하여 GridLayout에서 의미가 없습니다.

해결책 : JPanels를 중첩하십시오. 바깥 쪽 JPanel에 BorderLayout을 사용하고 BorderLayout.NORTH 지정자를 사용하여이 바깥 쪽 JPanel에 목록의 JScrollPane을 추가 한 다음 JButton을 보유하고있는 GridLayout을 사용하는 내부 JPanel을 만들고 BorderLayout의 주 외부 JPanel에 추가합니다. CENTER 위치.

비록 가장 중요합니다 : here을 찾을 수있는 스윙 튜토리얼, 특히 레이아웃 관리자 사용에 관한 섹션을 읽으십시오.이 항목을 추측 할 필요가 없으므로 특히 그렇습니다.