2016-12-16 3 views
0

문제가 있습니다. 프레임 크기를 설정했지만 작동하지 않습니다. 이것에 대한 주제를 찾았지만, 나에게 도움이되지 않습니다 ...자바 스윙 setSize

나는 getContentPane().getSize(500,500)으로 시도했지만 아무 것도.

import java.awt.event.*; 
import java.awt.*; 
import javax.swing.*; 
public class Mere extends JFrame{ 
    private JPanel b; 
    public Mere(String titlu){ 
     setSize(500,500); 
     setLayout(null); 
     this.getSmth(); 
     pack(); 
     show(); 
    } 
    public void getSmth(){ 
     JLabel user=new JLabel("User"); 
     user.setBounds(10,10,80,25); 
     getContentPane().add(user); 

     JTextField userText=new JTextField(20); 
     userText.setBounds(100,10,160,25); 
     getContentPane().add(userText); 

     JPasswordField pas=new JPasswordField(20); 
     pas.setBounds(100,40,160,25); 
     getContentPane().add(pas); 

     JButton n=new JButton("Register"); 
     n.setBounds(180,80,100,30); 
     getContentPane().add(n); 

     JLabel pass=new JLabel("Pass"); 
     pass.setBounds(10,40,100,25); 
     getContentPane().add(pass); 
     getContentPane().setVisible(true); 
    } 
    public static void main(String[]args){ 
     new Mere("yas"); 
    } 
} 

답변

4
  1. 당신은 setSize()를 호출 한 후 pack();를 호출하고 있습니다. Oracle docs

    원인으로

    이 창은 그 하위의 바람직한 크기 및 레이아웃에 맞게 크기가된다. 크기의 어느 쪽이든이 전의 setMinimumSize 메소드의 호출로 지정된 최소 사이즈보다 작은 경우, 결과적으로 윈도우의 폭과 높이가 자동적으로 커집니다.

    따라서 getPreferredSize() 메서드를 무시하거나 pack() 호출을 제거하십시오. 참조 Should I avoid the use of setPreferred/Maximum/MinimumSize? (YES)

    가장 좋은 방법 (아래 explanined으로) 레이아웃 관리자를 사용하고 pack()를 호출하고 관리자를 수 있도록하는 것입니다 그러나의 preferredSize을 계산하면서 일이다 할 당신 또한

  2. 당신 ' null 레이아웃을 사용합니다. 스윙은 다양한 PLAF 및 화면 크기와 해상도로 작동하도록 설계되었으며 완벽한 픽셀 GUI는 복잡한 GUI를 만드는 가장 빠르고 빠른 접근 방법처럼 보일 수 있습니다.이 때문에 더 많은 문제를 해결할 수 있습니다. , 그래서 가서 적절한 Layout Manager 또는 그 조합을 사용하십시오.

  3. 내가 보는 또 다른 것은 그것을 사용하는 방법에 대한 예를 들어 SwingUtilities.invokeLater() why is it needed?this answer를 참조 Null Layout is Evil 확인하고 또 다른 것은 당신이 Event Dispatch Thread (EDT)에 프로그램을 배치하지 않을 것입니다 Why is it frowned upon to use a null layout in Java Swing?

  4. 것은 당신이있어 것입니다 extension JFrame 영어로 번역 된 당신의 클래스 JFrame이고, Component에 추가해야 할 때 JFrame을 유연하게 사용하지 말고, 대신 JFrame 인스턴스를 만들어야하며 실제로 확장해야한다면 a JPanel.

+0

고맙습니다. 레이아웃이 더 쉬워서 레이아웃으로 사용되었습니다. – Eratys

+0

쉽지는 않다는 것을 항상 명심하십시오. 레이아웃 관리자를 사용하는 방법을 배우면 더 쉽게 사용할 수 있습니다. – Frakcool

+0

네, 맞습니다. GridBagLayout을 사용해 보겠습니다. D – Eratys