2012-02-27 2 views
1

스윙에서 절대 레이아웃으로 스크롤 막대를 사용할 수 없습니다.스윙에서 절대 레이아웃으로 스크롤 막대 사용

이 레이아웃을 사용하고 싶지는 않지만 버튼을 클릭하면 내 패널에 동적 객체를 표시하고이 레이아웃을 사용하여 수행 할 수있는 setBounds을 사용하여 정렬해야합니다 (추측).

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class clothes2 extends javax.swing.JFrame { 

    JTextField n=null; 
    JButton m=null; 

    public clothes2(){ 
     initComponents(); 
    } 

    public void initComponents() { 
     Container contentPane = getContentPane(); 
     contentPane.setLayout(new BorderLayout()); 
     final JPanel jp = new JPanel(); 
     contentPane.setPreferredSize(new Dimension(320,200)); 
     jp.setLayout(null); 
     m=new JButton("add"); 
     m.setBounds(0,0,50,50); 
     jp.add(m); 
     m.addMouseListener(new MouseAdapter() { 

      int x=0; 
      int y=0; 

      public void mouseClicked(MouseEvent me){ 
       x+=100; 
       y+=100; 
       jp.add(n=new JTextField("Name")); 
       n.setBounds(x, y, 50, 50); 
       jp.add(n=new JTextField("code")); 
       x+=100; 
       n.setBounds(x,y, 50, 50); 
       jp.revalidate(); 
       jp.repaint(); 
       x=0; 
      } 
     }); 

     int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS; 
     int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS; 
     JScrollPane jsp = new JScrollPane(jp, v, h); 
     contentPane.add(jsp, BorderLayout.CENTER); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       JFrame f= new clothes2(); 
       f.setVisible(true); 
       f.setSize(640,320); 
      } 
     }); 
    } 
} 
+1

_i 추가 레이아웃 - 간단하게 수동 뭐 :-)를 따라, 좋은 생각 (정렬, 크기 및 위치)의 작업을 _is_ LayoutManager를 사용해, 그 일을 올바르게하는 것을 찾아냅니다. – kleopatra

+0

이 코드는 GUI의 왼쪽 상단에서 시작하는 열에 일련의 큰 사각형 텍스트 필드 (모두 동일한 너비와 높이)를 만들려고합니다. 그 맞습니까? –

답변

1

컨테이너의 바람직한 크기를 설정하십시오.

+0

사람이 나뿐만 아니라 적절한 사이즈를 시도 이 내 코드에 대한 링크입니다 https://www.yousendit.com/download/M3BuS3hmYWJlM1M5TE1UQw 나뿐만 아니라 전에 적절한 사이즈를 시도 –

+0

감사하지만 'didn를 일하지 마라. 친절하게 코드를 확인하십시오. –

1

JScrollBar는 스크롤 막대의 크기와 표시 여부를 결정하기 위해 내부의 구성 요소의 기본 크기를 사용합니다.

일반적으로 레이아웃 관리자는 preferredLayoutSize 메소드를 사용하여이를 처리합니다. 이는 구성 요소의 기본 크기를 명시 적으로 설정하여 재정의 할 수 있습니다.

그래서 원하는 크기를 설정하거나 직접 계산하는 맞춤 레이아웃 관리자를 사용해야합니다.

here

당신을 도울 수도 참조하십시오.

+0

사람이 나뿐만 아니라 적절한 사이즈를 시도 이 내 코드에 대한 링크입니다 https://www.yousendit.com/download/M3BuS3hmYWJlM1M5TE1UQw 나뿐만 아니라 전에 적절한 사이즈를 시도 –

+0

감사하지만 'didn를 일하지 마라. 친절하게 코드를 확인하십시오. –

+0

코드가 1KB 미만인 경우 링크로 연결하지 말고 질문에 맞게 편집하십시오! (나는 그것을했다.) –

2

동적 객체를 표시합니다.이 레이아웃 만 사용하여 수행 할 수 있습니다 (추측).

잘못된 것 같습니다.

this GUI을 참조하십시오. 런타임시 PLAF를 변경할 수있을뿐 아니라 새로운 구성 요소를 동적으로 추가 할 수도 있습니다. . 하지만 원칙은 어떤 레이아웃 (또는 구성 요소)에 대해 동일합니다 - ..

는 또 다른 라벨

  1. 이 예는 GridLayout에 새 레이블을 추가를 추가합니다.
+0

내가 말하고자했던 것은 내가 동적 인 객체를 넣고 싶다는 것이다! 네, 다른 사람들도 그렇게 할 수 있습니다! 동의했다. 격자 레이아웃으로 시도했습니다. 하지만 마진을 제공해야합니다. 제대로 정렬해야합니다. 패널에 물건을 던지는 것이 아닙니다. 그래서 절대 레이아웃을 사용하므로 setBounds 을 사용할 수 있습니다. 그룹 레이아웃도 검색했지만 동적 개체를 추가하는 데 실패했습니다. –

+0

* "패널에 물건을 던지는 것에 관한 것이 아닙니다."* 당연히 아니지만, 패널에 정확히 던지지는 마십시오. 정확히 어디에 넣을까요? 말로 표현할 수 있다면, 동적 인 방식으로 컴포넌트 배치를 수용 할 J2SE 또는 타사 레이아웃을 결정할 수 있다고 확신합니다. 나는 'GridLayout'이 당신의 유스 케이스에 대한 궁극적 인 대답이라는 것을 의미하지 않았다. 그래서 나는 (이번에는 좀 더 크게) *이 예제는 GridLayout에 새로운 레이블을 추가한다. 그러나 원리는 * * 모든 레이아웃 ** (또는 모든 구성 요소). * –

0

이 layout_ 사용하지 않으
jp.setLayout(new FlowLayout());