2014-11-28 5 views
0

예산 프로그램에 대한 항목의 동적 목록을 만들려고합니다. 처음에는이 목록에 10 개의 항목이 있다고 가정하고 사용자에게 항목을 더 추가하고 스크롤 할 수있는 옵션을 제공하고 싶습니다. 모든 항목은 레이블 1 개와 텍스트 상자 1 개가있는 패널입니다.JPanel 아래로 스크롤

내 패널의 레이아웃이 그리드로 설정되어 있고이 패널에 11 번째 항목을 추가 할 때 열 수를 2로, 행 수를 2로 설정했습니다. 이 패널에 항목을 추가 할 때 패널의 "보기"가 넓어지는 것을 제외하고는 괜찮습니다.

같은 크기로 유지하고 다른 내용을 보려면 아래로 스크롤 할 수있는 패널의 "보기"를 갖고 싶습니다. Heres는

내 코드 :

private void AddButtonActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
    javax.swing.JPanel newCategoryPanel = new javax.swing.JPanel(); 
    javax.swing.JLabel newLabel = new javax.swing.JLabel(); 
    javax.swing.JTextField newTextField = new javax.swing.JTextField(); 

    newCategoryPanel.setLayout(new java.awt.GridLayout(1, 2)); 

    newLabel.setText("Poop :)"); //for testing 
    newCategoryPanel.add(newLabel); 

    newTextField.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 

     } 
    }); 
    newCategoryPanel.add(newTextField); 
    panel1.add(newCategoryPanel); 
    panel1.revalidate(); 

} 
+0

JPanel을 JScrollPane에 넣고 JPanel의 레이아웃을'GridLayout (0, 2)'로 설정합니다. – Compass

+0

1. 'JTable'사용을 고려하십시오. 2. * 새로운 것을 만드는 대신 이전의 [이전 질문] (http://stackoverflow.com/questions/27178150/creating-a-dynamic-scrollable-list-in-jframe)을 편집 해보십시오. * – kiheru

답변

0

가 스크롤 패널 내부에 고정 패널이 배치 할 수있는 유연한 레이아웃 매니저가 당신이 당신이 원하는 모든 것을 할 수 그것으로 쉽게 및 MigLayout을 시도 마스터, 당신의 JScrollPanesetPreferredSize를 호출해야을 가지고

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

import net.miginfocom.swing.MigLayout; 

public class Test { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame t = new JFrame(); 
       t.setBounds(100, 100, 500, 500); 
       t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JPanel global = new JPanel(); 
       global.setLayout(new MigLayout("wrap 1", "", "")); 
       JButton add = new JButton("Add"); 

       JPanel listItems = new JPanel(); 
       listItems.setLayout(new MigLayout("wrap 2", "[]20[]", "")); 

       add.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent e) { 
         JLabel label = new JLabel("Item Label"); 
         JTextField text = new JTextField("Value", 20); 
         listItems.add(label); 
         listItems.add(text); 
         global.validate(); 
        } 
       }); 

       global.add(add); 
       JScrollPane scroll = new JScrollPane(listItems); 
       scroll.setPreferredSize(new Dimension(400, 600)); 
       global.add(scroll); 

       t.add(global); 
       t.setVisible(true); 
      } 
     }); 
    } 
} 

및 결과 :

enter image description here, 여기 시작하는 몇 가지 코드

+0

[Don ' [예] (http://stackoverflow.com/a/)에 대해'getPreferredSize()'] (http://stackoverflow.com/q/7229226/230513)를 실제로 오버라이드하려는 경우'setPreferredSize()'를 사용하십시오. 14011536/230513). – trashgod