2010-11-29 6 views
1

내 코드 :JPanel의 크기를 조정하지 않습니다

public MyConstructor() { 
    view = new JPanel(new GridLayout(3, 1)); 
    header = new JPanel(new GridLayout(2, 1));//2 ROWS 1 COLUMN 
    foot = new JLabel("Copyright..."); 
    content = new JPanel(); 
    info = new JLabel(""); 
    logo = new JLabel() { 

     BufferedImage img; 

     @Override 
     public void paint(Graphics g) { 
      try { 
       img = ImageIO.read(new File("logo.jpg")); 
      } catch (IOException e) { 
      } 
      g.drawImage(img, 0, 0, null); 
     } 
    }; 
    window.add(view); 
    header.add(logo); 
    header.add(info); 
    view.add(header); 
    view.add(content); 
    view.add(foot); 
    window.setLocation(width/2, 100); 
    window.setSize(width, height); 
    window.setPreferredSize(new Dimension(width, height)); 
    content.setSize(window.getWidth(), height-70); 
    content.setPreferredSize(new Dimension(window.getWidth(), height-70)); 
} 

"창"... 클래스가 JFrame의 내 클래스가 다른 사람에게 수퍼 클래스가 될 것입니다 프레임 확장되지되고, 서브 클래스가 상속 공개 콘텐츠 JPanel. 내 Super 클래스에서 너비와 높이를 3 GridLayout, 로고 및 정보 구성 요소 높이를 설정하려면 노력하고있어. 최대 높이를 70 추가 ... 다른 구성 요소를 설정했습니다 (보기, 머리글, 정보 , 로고) 서브 클래스가 액세스 할 수 없도록 ...

응용 프로그램이 실행되면 로그인 창이 표시되고 올바르게 표시되고 크기가 조정됩니다. 일단 하위 클래스 중 하나의 인스턴스가 생성되면 로그인 윈도우는 숨겨집니다. 사이트가 숨겨집니다. setVisible (false)

그러나 새 창이 표시되면 JFrame은 올바른 크기이지만 헤더, 내용 및 바닥 글은 currect 크기가 아닙니다. 각 구성 요소의 크기와 기본 크기를 설정했지만 여전히 작동하지 않습니다 ... 또한 repaint 및 validate/revalidate 호출 시도했습니다.

아이디어가 있습니까?

답변

1

디자인이 개선 될 수 있다고 들립니다. 왜이 변수들은 수퍼 클래스의 속성 일 필요가 있습니까? 필요로하는 패널을 생성하는 메서드와 각 인스턴스에 대해 새로운 패널을 얻을 수 있도록 추가하는 생성자가있는 것입니다.

실제로 머리글과 바닥 글 클래스를 만든 다음 프레임을 서브 클래 싱해야하는 대신 동일한 머리글과 바닥 글을 가져 오는 대신에 다시 사용하는 것이 어떻습니까?

+0

제 디자인에 다시 작업이 필요하다고 생각합니다 ... 모두에게 포인터를 주셔서 감사합니다. – zcourts

0

컨테이너에 구성 요소를 추가하고 구성 요소를 "상향식"으로 추가하기 전에 원하는 크기를 설정해보십시오. 그렇지 않으면 pack(), revalidate(), repaint() 등으로 전화를 걸어보십시오.

레이아웃 관리자에 대한 정보도 올바르게 사용하고 있지 않습니다.

또한 스윙이 빨기도합니다. Netbeans을 사용해보십시오. 조금 더 견딜 수 있습니다. 수동으로 배치하고 크기를 조정해야 할 때 많은 도움이됩니다.

+1

IDE를 사용하여 GUI를 생성하지 마십시오. 코드를 직접 작성하여 IDE가 아닌 Java를 배우는 방법을 배우십시오. – camickr

+0

당신은 모든 것을 자바가 싫어하지 않는 한,하지만 내가 어떤 이유로 Swing을 사용해야 만합니다 : P – slezica

1

왜 이미지를 칠하기 위해 라벨을 덮어 쓰시겠습니까?

  1. 은의 setIcon() 메소드는,이 방법은
  2. 사용자 정의 그림이 필요한 경우에 이루어집니다 여러 번 호출되기 때문에 사용자 정의 그림 코드에서 파일을 읽어 본 적이해야
  3. 을 위해 무엇입니다 paintComponent() 메서드.
관련 문제