2010-01-13 2 views
2

JPanel에 JTextFields @ runtime을 추가하는 Java 응용 프로그램이 있습니다. 기본적으로 사용자가 버튼을 클릭하고 새로운 JTextField가 추가되고 다시 클릭이 다시 추가됩니다 ...NetBeans의 Java Swing Scrollpane

각 새 JTextField는 이전의 JTextField 바로 아래에 있습니다. 분명히 나는 ​​JScrollPane을 사용하려고 노력하면서 공간이 거의 다 빠져 나간다. 내가 무엇을 시도하든 그것이 작동하지 않기 때문에 지옥이 시작된다.

  1. 스크롤 패널에서 JPanel 및 Enclose를 마우스 오른쪽 버튼으로 클릭하십시오. didnt는 일한다.
  2. 몇 가지 예를 읽은 후 JanePane 생성자에 대한 인수로 JPanel을 가져야 함을 깨달았습니다. ScrollPane 및 CustomizeCode를 마우스 오른쪽 버튼으로 클릭하여 수행 한 작업입니다. 분명히 자동 생성 된 코드는 NetBeans에서 보호되어 있으므로 모든 선언을 수동으로 변경할 수는 없습니다. 아직도 doesnt 일.
  3. JPanel 및/또는 JScrollPane에 대해 PreferedSize를 null로 설정하려고했으나 도움이되지 않았습니다.
  4. JScrollPane는, TabPageanel (TabbedPane의 탭)을 호출 할 수있는 자식입니다. 나는 기본적으로 JFrame, JPanel (텍스트 필드 유지), TabJPanel 및 JScrollPane 사이의 모든 가능한 방식의 부모 관계를 시도했지만 관계는 엉망으로 만들려고했지만 아무 것도 효과가 없었습니다.
  5. 나는 또한 경우에 따라 항상 "보이는"VerticalScrollBar를 만들었습니다. 그래서 스크롤바를 보았습니다. JTextFields가있는 JPanel이 영향을 미치지 않는다는 것입니다.
  6. JTextField가 너무 많으면 JPanel의 아래쪽 경계선 아래로 이동하므로 더 이상 볼 수 없습니다.

새로운 JTextField를 추가하는 코드는 관련성이있는 경우 이와 같습니다. 난 그냥 가능한 한 많은 정보를 제공하기 위해 노력하고있어 긴 게시물에 대한 죄송합니다

JTextField newField = new JTextField(columns); 
Rectangle coordinates = previousTextField.getBounds(); 
newField.setBounds(coordinates.x , coordinates.y + 50, coordinates.width, coordinates.height); 

JPanel.add(newField); 
JPanel.revalidate(); 
JPanel.repaint(); 

, 내가 그나마있는 초보자가 뭐죠 정확히 관련성이 뭐죠 알지 못하기 때문이다. 미리 감사드립니다 :)

+0

단일 열에서'JTable'을 사용 해본 적이 있습니까? 그러면 자동으로이 모든 작업을 수행 할 수 있으며 동적 값을 쉽게 처리 할 수 ​​있습니다. –

+0

'JList'는 단일 열'JTable'만큼 좋을 것입니다. – akf

+0

@akf : 나는 정중히 동의하지 않습니다. 'JList'는 편집 할 수 없습니다 (http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=2668b0245e0c6ffffffff8c9a141bfd70b62?bug_id=4143856 참조) –

답변

2

다른 답변이 있으므로 지금 제 제안을 추가하고 있습니다.

이것은 정확히 단일 열이 JTable 인 문제와 같습니다. JListnot yet editable입니다.

JTable은 레이아웃 문제를 처리하므로 테이블을 통해 값에 쉽게 액세스 할 수 있습니다.

고객님의 TableModel (귀하의 경우에는 Vector으로 충분해야 함)을 사용하고 값을 추가하십시오.

+0

고마워, 실제로 편집 가능한 내용을 가진 JTable은 많은 TextField를 갖는 것보다 내 목적에 더 잘 맞는다. :) – Sejanus

0

구성 요소에 경계를 직접 설정하는 대신 LayoutManager을 사용하는 것이 좋습니다. 이를 테스트하기 위해서는 정렬을 vertical로 설정 한 간단한 단일 열 GridLayout이 개념을 증명해야합니다. 필요에 따라 행 레이아웃에 추가 대한 rows PARAM에

panel.setLayout(new GridLayout(0,1)); 

제로 수있다.

0

이 방법을 사용하여 스크롤 패널을 추가하고, 패널을 만들고, 몇 개의 구성 요소로 채우고, 추가하려는 구성 요소에 스크롤 패널을 만들고, 모든 세부 정보가 포함될 패널을 잘라내어 붙여 넣습니다. 스크롤 구획의 사이즈를 변경한다.컴퍼넌트는 스크롤 구획을 오른쪽 클릭 해 표시하는 것보다 큰 스페이스를 차지해,이 컨테이너의 디자인을 선택하기 때문에 거기에서 스크롤 구획의 사이즈를 늘려, 거기에있는만큼의 컴퍼넌트를 추가 할 수 있습니다.