2017-02-24 21 views
0

空のJTableを作成する簡単なプログラムを書いています。しかし、テーブルを表示すると余分な空白がテーブルの下に表示されます。次に、テーブルの行の下の空白を削除します。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(でnew JScrollPane(表));'、あなたは他の二つの 'c.add'ラインを取り除くことができます。 'JTable#setFillsViewportHeight'も役に立ちます – MadProgrammer

+0

あなたは[これが好きですか?](http://stackoverflow.com/a/6175860/418556)を意味しますか? –

+0

いいえ、私はこのような意味:次のリンクの表の2番目の画像を参照してください:[リンク](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); 
    } 
} 
関連する問題