2011-07-06 4 views
2

Java Swing 라이브러리를 사용하여 GUI를 개발 중입니다. GridPlayout을 레이아웃으로 사용하는 Jpanel에 일부 JButton을 추가하려고하는데 문제가 있습니다. 패널의 크기는 모니터의 전체 크기에 대한 것이지만 JButton의 크기가 다를 수 있습니다. 패널에 10 * 10 배열을 추가 할 수 있지만 패널에 3 * 3 배열의 Jbutton을 추가 할 수 있습니다. 내가 3 * 3을 추가하면 jbutton은 현재 JPanel (옵션 이름 인)의 맨 위에있는 JPanel조차도 전체 디스플레이를 차지할만큼 커야 만합니다. 상수를 설정하려면 어떻게해야합니까? 크기가 2 Jbutton (현재 전체 디스플레이를 사용함)인데도 크기가 변경되지 않도록 JButtons의 크기 (setSize 함수는 작동하지 않으며 레이아웃이 GridLayout이 아닌 null이되기를 원합니다.) 코드의 일부분은 다음과 같습니다 :레이아웃이 "GridLayout"인 JPanel에 JButton을 추가

public class Edit extends JFrame{ 
public Edit() 
{ 
    width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(); 
    height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight(); 
    newer = new JButton(new ImageIcon(b)) ; 
    done = new JButton(new ImageIcon(f)) ; 
    savior = new JButton(new ImageIcon(d)) ; 
    undo = new JButton(new ImageIcon(h)) ; 
    newer.setSize(200, 60); 
    done.setSize(200, 60); 
    savior.setSize(200, 60);  
    undo.setSize(200, 60); 
    options = new JPanel(); 
    options.setSize(width , 100); 
    options.setLayout(new GridLayout(1,5,(width- 1000)/6,20)) ; 
    options.add(newer); 
    options.add(done); 
    options.add(savior); 
    options.add(undo); 
    options.setBackground(Color.magenta); 
    options.add(selector); 
    this.setExtendedState(this.MAXIMIZED_BOTH); 
    this.setUndecorated(true); 
    this.setVisible(true); 
    view = new JPanel(); 
    regions = new JButton[3][3]; 
    view.setSize(width, height - 100) ; 
    view.setLayout(new GridLayout(3,3)); 
    for(int i=0;i<3;i++) 
       for(int j=0;j<3;j++) 
     { 
       regions[i][j] = new JButton(); 
        regions[i][j].setSize(80,80) ; 
      view.add(regions[i][j]); 
      } 
    editPhase = new JPanel(); 
    editPhase.setLayout(null); 
    editPhase.add(options,BorderLayout.NORTH); 
    editPhase.add(view,BorderLayout.SOUTH); 
    this.add(editPhase); 
    } 
} 

미리 감사드립니다.

+3

먼저 호출해야한다'setPreferredSize (...)'이 아닌'에는 setSize (...)'. 두 번째로, 각 버튼을 패널에 배치하고 기본 크기를 설정 한 다음 지정된 영역에 추가 할 수 있습니다. 따라서'JButton'이 아니라'JPanel' 만 크기가 조정됩니까? – mre

+0

더 강력하고 유용한 레이아웃을 사용하지 않는 이유는 무엇입니까? (나는 JGoodies를 선호합니다. 많은 사람들이 마이그레이션 레이아웃 또는 테이블 레이아웃을 권장합니다)? –

답변

4

는 여기에 코멘트에서 아이디어를 사용하여 구현의 : 모든

public class Main { 

    public static void main(String[] args) { 
    JFrame frame = new JFrame(); 

    int gridSize = 3; // try 4 or 5, etc. buttons are always 50x50 

    JPanel panel = new JPanel(new GridLayout(gridSize, gridSize)); 
    panel.setPreferredSize(new Dimension(500, 500)); 

    for (int i = 0; i < gridSize; i++) { 
     for (int j = 0; j < gridSize; j++) { 
     JPanel buttonPanel = new JPanel(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.anchor = GridBagConstraints.CENTER; 

     JButton button = new JButton(); 
     button.setPreferredSize(new Dimension(50, 50)); 
     buttonPanel.add(button, c); 
     panel.add(buttonPanel); 
     } 
    } 
    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 
+0

+1, 이것이 가장 좋은 구현인지 잘 모르겠지만 아이디어가 있습니다. 어쩌면 그것은 어쩌면? :) – mre

+0

고마워요 :) 네, 그렇게 할거예요. –

관련 문제