2010-08-14 3 views
5

런타임시 JButton의 크기를 조정하여 setSize에 지정된 텍스트에 맞게 조정하는 방법은 무엇입니까? 나는 약간의 검색을했는데 이것은 내가 지금까지 생각 해낸 코드이다. 이것은 유틸리티 방법으로 바뀔 수 있습니까?텍스트에 따라 JButton 및 기타 구성 요소 크기 조정

FontMetrics metrics = getFontMetrics(font); 
int width = metrics.stringWidth(string); 

추신 : 레이아웃 관리자가 사용되지 않습니다.

+1

나는 내 대답을 업데이트했다. 나는 그것이 당신이 원하는대로한다고 생각한다. – jjnguy

답변

6

구성 요소에 setPreferredSize()을 사용해야합니다. 그런 다음 크기를 조정하려면 setBounds()으로 전화하십시오.

버튼을 서브 클래스 화하고 setText(String text) 메서드를 재정 의하여 크기 조정 코드를 포함 할 수 있습니다. 이 크기를 조정하면 내가 버튼을 클릭 할 때마다

public ResizeToTextButton(String txt){ 
    super(txt); 
    addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      setText(JOptionPane.showInputDialog("Text")); 
     } 
    }); 
} 

그래서, 내가 텍스트를 변경하고 볼 수 있습니다 :

@Override 
public void setText(String arg0) { 
    super.setText(arg0); 
    FontMetrics metrics = getFontMetrics(getFont()); 
    int width = metrics.stringWidth(getText()); 
    int height = metrics.getHeight(); 
    Dimension newDimension = new Dimension(width+40,height+10); 
    setPreferredSize(newDimension); 
    setBounds(new Rectangle(
        getLocation(), getPreferredSize())); 
} 

는 테스트를 위해, 나는 나의 새로운 JButton 서브 클래스의 생성자에서 이런 짓을 정확히.

+2

행 : "FontMetrics metrics = getFontMetrics (새 글꼴 (Font.SANS_SERIF, Font.PLAIN, 12));" "FontMetrics metrics = getFontMetrics (getFont());"라고 써야합니다.하지만이 점에 대해 감사드립니다. :-) – AudioDroid

+0

@Audio, 여러분은 환영합니다. 그리고 내 실수를 지적 해 주셔서 감사합니다. 나는 그것을 바로 잡았다. – jjnguy

+0

나는 고마워해야한다. 이 기능은 둘 이상의 언어로 표시 할 수있는 응용 프로그램에 특히 유용합니다. –

2

레이아웃 관리자 (BorderLayout)를 사용하는 경우에도 동일한 문제가있었습니다. 그러나 제 경우에는 관련된 레이아웃 관리자의 layoutContainer()에 대한 간단한 호출과 JFrame의 repaint()이 버튼 폭을 변경하기에 충분했습니다.

button1.setText("New Label that differs in width"); 
// button1 is inside the container horizontalBox 
horizontalBox.getLayout().layoutContainer(horizontalBox); 
repaint(); // on the containing JFrame 
+0

팁을 환영합니다 :) –

관련 문제