2017-02-24 1 views
0

빈 JTable을 만드는 간단한 프로그램을 작성했습니다. 그러나 테이블을 표시 할 때 테이블의 아래에 공백을 제거하려면 Table.Now 아래에 여분의 공백이 표시됩니다.JTable 하단에서 여분의 공백을 제거하는 방법은 무엇입니까?

JTable의 프로그램 :

public class Table extends JFrame { 

Table() 
{ 
     int numColoumns=5; 
     int numRows=10 ; 
     String[] colHeadings = {"COLUMN1","COLUMN2","COLUMN3","COLUMN4","COLUMN5"}; 

     DefaultTableModel model = new DefaultTableModel(numRows, numColoumns) ; 
     model.setColumnIdentifiers(colHeadings); 

     JTable table = new JTable(model); 
     JTableHeader head = table.getTableHeader(); 

     Container c = getContentPane(); 
     c.setLayout(new BorderLayout()); 
     c.add("North", head); 
     c.add("Center",table); 
}  
public static void main(String[] args) throws NumberFormatException, IOException 
{ 
    Table t = new Table(); 
    t.setSize(500,400); 
    t.setVisible(true); 
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
}} 

이 프로그램은 나에게 표를 제공하지만 행은 창으로 완전히 채워되지 않습니다. 주어진 높이와 너비 (픽셀 단위)와 행 개수를 가진 창을 보여줍니다. 아래에 작성된 행 아래에는 행이 창에 채워지지 않으므로 추가 공간이 표시됩니다. 누군가 창에서 여분의 공간을 제거하는 데 도움이 될 수 있습니다.

미안 출력 이미지를 만들었지 만 이미지를 업로드하는 데 문제가 있습니다.

+0

'c.add (새 JScrollPane의 (표)) 는,'당신은 다른 두'c.add' 라인을 제거 할 수 있습니다. 'JTable # setFillsViewportHeight'도 도움이 될 수 있습니다. – MadProgrammer

+0

[좋아요] (http://stackoverflow.com/a/6175860/418556)를 의미합니까? –

+0

아니오, 다음과 같은 의미입니다. 다음 링크의 표의 두 번째 이미지를 참조하십시오. [link] (http://stackoverflow.com/questions/18274975/setpreferredscrollableviewportsize-vs-setfillsviewportheight-in-jtable) 출력 내 테이블에 대한 형식 –

답변

3

그림에서 here과 같이 Scrollable 메서드 getPreferredScrollableViewportSize()을 재정 의하여 처음 원하는 행 수를 반영하는 값을 반환 할 수 있습니다. 행이 추가 될 때마다 pack()은 "Window이 하위 구성 요소의 기본 크기 및 레이아웃에 맞게 크기가 조정됩니다."

image

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 

/** 
* @see https://stackoverflow.com/a/37343900/230513 
* @see https://stackoverflow.com/a/37318673/230513 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     class MyTableModel extends AbstractTableModel { 

      private int n = 8; 

      private void addRow() { 
       n++; 
       fireTableRowsInserted(n - 1, n - 1); 
      } 

      @Override 
      public int getRowCount() { 
       return n; 
      } 

      @Override 
      public int getColumnCount() { 
       return 4; 
      } 

      @Override 
      public Object getValueAt(int rowIndex, int colIndex) { 
       return "R" + rowIndex + ":C" + colIndex; 
      } 
     }; 
     MyTableModel model = new MyTableModel(); 
     JTable table = new JTable(model) { 
      @Override 
      public Dimension getPreferredScrollableViewportSize() { 
       return new Dimension(super.getPreferredSize().width, 
        getRowHeight() * getRowCount()); 
      } 
     }; 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     f.add(new JScrollPane(table)); 
     f.add(new JButton(new AbstractAction("Add Row") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       model.addRow(); 
       f.pack(); 
      } 
     }), BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
관련 문제