2014-01-11 5 views
1

JTextField가 OverlayLayout에 추가되었지만 JTextField는 자동으로 전체 패널의 크기가되도록 조정합니다. 원하지 않습니다. 기본 높이가 글꼴에 적합하고 너비가 생성자의 열 수로 정의되기 때문에 JTextField의 크기를 엉망으로 만들고 싶지 않습니다. 이 문제를 해결하는 올바른 방법은 무엇입니까?OverlayLayout에 JTextField 추가

다음은 현재 가지고있는 관련 코드입니다. frame = new JFrame ("frame"); frame.setResizable (false);

panel = new GamePanel(); 
panel.setPreferredSize(new Dimension(500,300)); 
panel.setLayout(new OverlayLayout(panel)); 
JTextField t = new JTextField(50); 
panel.add(t); 

frame.add(panel); 
frame.pack(); 
frame.setVisible(true); 

GamePanel은 JPanel의 서브 클래스에 불과합니다. JTextField에 영향을 줄 수있는 것은 아무것도하지 않습니다.

편집 : 좋아, 이제 기본 스윙 레이아웃 관리자를 사용하는 것이 최선의 방법이 아니라는 말을 들었습니다. kleopatra는 필요한 세 가지 타사 레이아웃을 참조하는 페이지를 링크했지만 사용자 정의 렌더링 패널에 텍스트 필드 (또는 다른 구성 요소)를 오버레이 할 수있는 항목을 찾을 수 없습니다. 올바른 접근 방법은 무엇입니까?

+0

[* Minimal, Complete, Valid Example *] (http://stackoverflow.com/help/mcve) 현재 접근법. – trashgod

+0

GamePanel에서 FlowLayout을 사용하기 만하면됩니다. – camickr

+0

[setXXSize를 사용하지 마십시오.] (http://stackoverflow.com/a/7229519/203657) – kleopatra

답변

1

원하는대로 작동합니까?

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.LayoutManager; 

import javax.swing.JTextField; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.OverlayLayout; 

public class OverlaySampleAlignment0 { 
    public static void main(String args[]) { 
    JFrame frame = new JFrame("Overlay Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

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

    LayoutManager overlay = new OverlayLayout(panel); 
    panel.setLayout(overlay); 

    JTextField field = new JTextField("", 12); 
    field.setMaximumSize(field.getPreferredSize()); 

    //button.setMaximumSize(new Dimension(25, 25)); 
    field.setBackground(Color.white); 
    field.setAlignmentX(0.0f); 
    field.setAlignmentY(0.0f);  
    panel.add(field); 


    frame.add(panel); 
    frame.setResizable(false); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 

높이는 정확히 글꼴에 필요한 높이 및 폭은 (내 예제에서) 12 "열"(JTextField를 내 자바 설정에서 기본적으로 고정 폭 글꼴을 사용하지 않습니다). 또한 왼쪽 상단 모서리에 정렬했습니다.

은 문제를 해결하는 데에있어서 또한 레이아웃 문제를 도움이 될 : 대부분의 코드 Link

여기에서 복사 : Link을. 방금 setMaximumSize(...)을 추가하고 버튼 대신 JTextField를 사용했습니다.

+0

[setXXSize를 사용하지 마십시오.] (http://stackoverflow.com/a/7229519/203657) – kleopatra

+0

@kleopatra : 당신은 명확히 할 수 있습니까? 이것들은,이 오브젝트가 요구하는 것의 LayoutManager에 지시하는 사이즈 힌트입니다. 필자가 제공 한 링크에서도 언급되어 있습니다. • 크기 힌트를 제공하는 또 다른 방법은 구성 요소의 setMinimumSize, setPreferredSize 및 setMaximumSize 메소드를 호출하는 것입니다. " 오라클을 신뢰하지 않거나 이러한 방법을 사용하지 않기 위해 어떤 기준으로 권장합니까? – NOhs

+0

참조 된 스레드를 읽고 약간의 검색을하십시오. – kleopatra