2009-12-24 9 views
0

세 번째 버튼의 크기를 다른 두 버튼과 같은 크기가되도록 조정하고 하단에 배치하는 방법에 대해 고민했습니다.JButton의 크기를 조정할 수 없습니다

class ControlFrame extends JFrame 
    implements Runnable 
{ 
    JButton jb_inc = new JButton(); 
    JButton jb_zero = new JButton(); 
    JButton jb_dec = new JButton(); 

    ControlFrame() { 
     super("Control Frame"); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    } 

    ControlFrame(int x,int y, int w, int h) { 
     this(); 
     this.setBounds(x, y, w, h); 
     this.setVisible(true); 

     jb_inc.setBounds(10,10,90,20); 
     jb_zero.setBounds(10,40,90,20); 
     jb_dec.setBounds(10,60,90,20); 

     jb_inc.setVisible(true); 
     jb_zero.setVisible(true); 
     jb_dec.setVisible(true); 

     this.getContentPane().add(jb_inc); 
     this.getContentPane().add(jb_zero); 
     this.getContentPane().add(jb_dec); 

    } 

    public void run() { 
    } 
} 

public class Counting_Machine 
{ 
    public static void main(String[] args) { 
     ControlFrame cf = new ControlFrame(0,200,80,150); 
    } 
} 

답변

0

두 가지 제안 :

1) 공통점을 인스턴스 초기화 블록에 넣습니다. 개인적으로 나는 "this()"에 대한 호출을 볼 때마다 나는 떨린다.

{ this.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE); }

ControlFrame() { super ("제어 프레임"); }

ControlFrame (int x, int y, int w, int h) { super ("제어 프레임"); ... }

2) 저는 x, y, w, h 생성자를 제거 할 것입니다 ... 개인적으로 화면 크기와 크기를 계산하는 "위치"방법을 가진 WindowUtils라는 클래스가 있습니다. 전달 된 값을 사용하여 화면의 상대 크기 인 창을 만듭니다. 그런 다음 창을 생성하는 코드가이를 호출합니다. 가능한 한 적은 수의 생성자를 갖는 것을 선호합니다 (매우 자주 0 또는 1, 거의 두 개 이상을 가지지 않습니다).

3) this.getContentPane(). add (jb_inc); 이제 add (jb_inc);라고 쓸 수 있습니다. - JDK 1.5 이후로 생각합니다.

4) 생성자 내부에서 overrideable 메소드 (이전에 가지고있는 모든 것)를 호출하지 마십시오. 서브 클래스가 "add"를 오버라이드 (override)하는 경우, 일이 깨지는 것을 볼 수 있습니다. 따라서 super.add()를 호출하거나 다른 메소드에서 추가 작업을 수행하거나 클래스를 final로 만들 수 있습니다.

지금 당신은 당신이 원하는 것을 얻을 LayoutManagers의 사용을 만들 필요가

:-) ... 귀하의 질문에 대답합니다.

원하는대로 원하는대로 BorderLayout을 사용하여 하단에 단추를 가져올 수 있습니다.

2

난 당신이 작동하지 않습니다의 BorderLayout의 "중심"3 개 구성 요소를 추가하려고하기 때문에 작동하지 않습니다 Using Layout Managers 귀하의 코드에 스윙 튜토리얼 섹션을 읽어 시작하는 것이 좋습니다. 필요에 따라 더 잘 맞는 LayoutManager를 선택하십시오.

레이아웃 관리자를 사용할 때 setBounds (...) 메서드를 사용할 필요가 없습니다. 레이아웃 관리자의 작업은 레이아웃 관리자의 규칙에 따라 구성 요소를 배치하는 것입니다. 단추에 텍스트를 추가하지 않았으므로 각 단추의 기본 크기는 같아야합니다.

또한 버튼에 setVisible()을 호출 할 필요가 없으며 최상위 컨테이너 (JFrame, JDialog)를 제외한 모든 Swing 구성 요소가 기본적으로 표시됩니다.

0

모든 것에 경계를 설정했기 때문에 LayoutManager가 전혀 필요하지 않습니다. LayoutManager를 null로 설정하면, 예제에서와 같이 모든 것을 직접 배치 할 수 있습니다.

this.setLayoutManager(null) 
+0

원래의 포스터가 묻는 문제를 해결하지만, 몇 가지 경우를 제외하고는 - '널 (null)'레이아웃을 사용하면 새로운 문제가 발생합니다. – Nate

관련 문제