2009-05-15 6 views
1

현재 Java Swing을 사용하여 계산기 패널을 설계 중입니다. 그러나 새로운 버튼을 추가하거나 버튼의 크기를 변경할 때마다 항상 버튼의 크기와 위치를 변경하기 때문에 모든 버튼을 정렬하는 것은 극한의 고통입니다.Java Swing 패널에서 객체의 위치를 ​​유지할 수 있습니까?

버튼을 이동/크기 조정/추가 할 때 영향을받지 않도록 버튼을 "잠글 수있는"레이아웃 유형이 있습니까?

덕분에, 밥

+0

GridLayout? GridBagLayout? 내가 정확히 그 질문을 이해하는지 모르겠다. 버튼이 움직이고 크기가 어떻게 바뀌나요? –

답변

0

당신은 그리드에서 그들을 유지하기 위해 GridBagLayout을 사용하지만 내가 대신 추가하고 버튼을 제거하는 제안들을

1

의 크기를 조절 할 수있는, 당신은 자신의 가시성 속성 (setVisible)을 변경합니다. 일부 레이아웃 관리자는 보이지 않는 구성 요소를 무시하므로 원본 구성 요소의 기본 설정/최소/최대 크기 다음에 동일한 위치에 비 opaue (또는 일치하는 배경) 구성 요소를 추가해야 할 수도 있습니다. 더 간단하면 OverlayLayout을 사용할 수 있습니다.

3

톰 말했다 확장 무엇 ...

가 구성 요소, 당신은 볼 수 빈 레이블 그냥 스왑과 함께 CardLayout에 배치 할 수 있습니다 보이지 않게 아직 그 자리를 유지 할 수 있도록하려면.

다음과 같이 클래스를 만들 수 있습니다. 메인은 위치를 유지하면서 버튼을 클릭하면 삭제되는 예제를 보여줍니다. showComponent/hideComponent에 넣고 setVisible (t/f) - 원하는 스타일에 따라 달라집니다.

이 정보는 사용자가 찾고있는 정보에 정확하게 대답하지는 않지만 응용 프로그램의 일부로 유용 할 수 있습니다.

public class Placeholder extends JPanel { 
    private static final long serialVersionUID = 1L; 
    private CardLayout cardLayout_; 
    public Placeholder(JComponent component) { 
     cardLayout_ = new CardLayout(); 
     setLayout(cardLayout_); 
     add(component, "visible"); // the component 
     add(new JLabel(), "hidden"); // empty label 
    } 
    public void showComponent() { 
     cardLayout_.show(this, "visible"); 
    } 
    public void hideComponent() { 
     cardLayout_.show(this, "hidden"); 
    } 
    public void setComponentVisible(boolean visible) { 
     if (visible) 
      showComponent(); 
     else 
      hideComponent(); 
    } 
    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     f.setLayout(new GridLayout(2,0)); 
     for (int n = 1; n < 10; n++) { 
      JButton b = new JButton(n + ""); 
      final Placeholder placeholder = new Placeholder(b); 
      f.add(placeholder); 
      b.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        placeholder.hideComponent(); 
       } 
      }); 
     } 
     f.pack(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 
} 
+0

이 작품! 구성 요소가 숨겨져있을 때 아무 것도 나타나지 않도록 JLabel을 투명하게 만드는 방법은 무엇입니까? – ATOzTOA

+0

내 질문을 무시하고, 자리 표시자는 불투명 한 배경을 가졌습니다 :) – ATOzTOA

0

은 다른 사람이 말했다 확장 무엇 ...

대신 구성 요소가 보이지 않게, 당신도 ... 물론
그들을 해제 할 수 있습니다, 그것은 당신의 응용 프로그램과 기본 설정에 따라 달라집니다.

위의 레이아웃 외에도 TableLayout 및 다용도 MigLayout과 같이 무료로 사용할 수있는 레이아웃이 있습니다.

0

아마도 사용중인 개발 환경에 따라 다릅니다.

Netbeans에서 컨트롤 컨테이너 (양식/패널)를 마우스 오른쪽 버튼으로 클릭하고 여러 가지 레이아웃 옵션 중에서 선택할 수 있습니다. 'Absolute Layout'을 사용하면 컨트롤을 자동으로 크기 조정하지 않고 컨트롤의 위치를 ​​지정할 수 있습니다.하지만 컨트롤을 서로 위에 배치 할 수는 없습니다.

0

A Visual Guide to Layout Managers을 확인하시기 바랍니다. 원하는 모양과 기능에 따라 사용할 수있는 레이아웃이 다릅니다. 주된 문제가 부모 JFrame의 크기 조정 작업 인 경우 (JPanel 가정) Spring Layout을 사용하면 구성 요소의 상대 위치와 관련된 제약 조건을 설정할 수 있습니다.

관련 문제