2013-03-09 6 views
2

그래서이 문제가 있습니다. Java Eclipse SDK 4.2.1에서이 코드를 작성했습니다. 나는 여기에 모든 것을 쓴 적이 없으며, actionPerformed 메서드는 지금 부적절하며 Main에서 한 번 호출됩니다. 문제는 때로는 그것을 실행할 때 구성 요소 중 하나가 전체 창을 채우고 다른 모든 창은 겹쳐서 표시됩니다. 예를 들어 400에서 350으로 임의의 숫자로 크기를 변경해 보았습니다. 때로는 제대로 작동하고 다시 고장났습니다. 나는 아마 무엇인가 놓치고있다, 나는 단지 무엇이 있는지에 관해 모른다. 나는 다른 포럼을 수색했으나 그것에 대해 아무것도 발견하지 못했습니다.자바 스윙 - 잘못된 크기

import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Collections; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 


public class Window extends JFrame implements ActionListener 
{ 
    JTextField field1; 
    JTextField field2; 

    public Window() 
    { 
     super("Main Window"); 
     setVisible(true); 
     setSize(500, 500); 
     setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Initialize(); 
    } 
    private void Initialize() 
    { 
     field1 = new JTextField(); 
     field2 = new JTextField(); 
     field1.setBounds(0, 0, 400, 100); 
     field2.setBounds(0,100,400,100); 
     add(field1); 
     add(field2); 
     field1.setBackground(Color.PINK); 
     field1.setForeground(Color.RED); 
     field2.setBackground(Color.PINK); 
     field2.setForeground(Color.RED); 
     JButton button = new JButton("Create"); 
     button.setBounds(0, 200, 400, 100); 
     add(button); 
     button.setBackground(Color.BLACK); 
     button.setForeground(Color.YELLOW); 
     button.addActionListener(this); 

    } 
+0

* "다시 깨졌습니다."* 코드가 프레임에서 명시적인 크기를 설정하고 테스트 필드의 경계에서 IT가 깨졌습니다. 또한 GUI가 EDT에서 구성되었는지 확인하십시오. 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

BTW - * "SDK 4.2.1"* 먼저이 번호를 '1.4.2'로 읽습니다. 자바 버전 '4.2.1'은 무엇입니까? –

+1

BTW2 - GUI가 똑같이 크기가 다른 셀의 수직 열에 3 개의 구성 요소를 넣으려는 것 같습니다. 'GridLayout'을 사용하십시오 - 이것은이 용도에 완벽합니다. –

답변

4

귀하의 문제는 실제로는하지 않을 때 레이아웃이 null이었다 사용하는 것처럼이 구성 요소를 추가하려는 귀하의 코드 레이아웃 매니저를 사용하고 존중하지 않는다는 것입니다. 해결책은 레이아웃 관리자를 읽고 그에 대해 배우고 사용하는 것입니다. 여기에는 setBounds(...)을 피하는 것이 포함됩니다. JFrame의 contentPane은 기본적으로 BorderLayout을 사용합니다. 이 정보는 시작하는 데 도움이됩니다. 잘못된 해결 방법은 null 레이아웃을 사용하는 것입니다. 그래서 누군가가 이것을 제안한다면, 나는 당신이 그들을 무시할 것을 촉구합니다.

+1

프레임의 기본 레이아웃이'FlowLayout'에서'BordeLayout'으로 변경되었습니다. 1) 사용자가 앱을 만들었 기 때문에 언급합니다. 1.4 (변경이 발생했을 때 확실하지 않음) & 2) SNAFU는 흐름 레이아웃을 가정 한 많은 GUI를 변경했습니다. - 이것이 내가 일반적으로 ** 콘텐츠 창을 설정하는 것을 선호하는 이유입니다. 우리는 이러한 종류의 놀라움없이'테두리 '와 레이아웃 - *을 선택하게됩니다. –

+0

@AndrewThompson : 언제나처럼 고마워! –

+2

JDK1.4에서 99에서 Java를 사용하기 시작했으며 기본값은 BorderLayout입니다. – camickr