2016-07-24 36 views
1

我正在尋找一種方法來底部填充的JTable頂部,例如:HOWTO設置JTable中生長到頂部

1行:

[clean space] 
row2 
row1 

看着的ComponentOrientation - 似乎它只允許從右到左但不下到了

也看不出使用LookAndFill

任何想法,任何方式?

+0

您可以嘗試按相反順序排列結果,然後將它們放入您的'JTable'中,以便將空行添加儘可能多的數據,因爲您的結果已經反轉。爲了更好地提供幫助,請儘快發佈[mcve],並且不要忘記說明您想要在上面放置多少行,是不是隻有一行? – Frakcool

+0

對我來說看起來不可能。您可以嘗試重新定義'JTable.getCellRect','JTable.rowAtPoint'和'JTable.columnAtPoint'方法,但這很困難。如果你運氣好的話,這將在沒有UI變化的情況下工作(機會不高於5%),否則你將需要基於當前使用的UI創建你自己的LookAndFeel。 –

+0

謝謝你Frakcoll和Sergiy,下面有一個解決方案,如果你想知道 –

回答

0

我希望這是你正在尋找的行爲:

import java.awt.ScrollPane; 
import java.util.Collections; 
import javax.swing.JFrame; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 

/** 
* 
* @author Skynet 
*/ 
public class JTableReverseFill { 
    public static void main(String[] args) {   
     Runnable r = new Runnable(){ 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("jtable-reverse"); 
       frame.setSize(200,200); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JTable jt = new JTable(); 
       MyReversedTableModel mtm = new MyReversedTableModel(); 
       mtm.addColumn("col1"); 
       mtm.addColumn("col2"); 

       for(Integer i = 0; i < 1000; i++) 
       { 
        mtm.addRow(new Object[]{"cell" + i.toString(), "cell" + i.toString() + i.toString()}); 
       }  

       jt.setModel(mtm); 

       ScrollPane sp = new ScrollPane(); 
       sp.add(jt); 
       frame.add(sp); 

       frame.setVisible(true); 
      } 
     }; 

     SwingUtilities.invokeLater(r); 
    } 


    public static class MyReversedTableModel extends DefaultTableModel 
    {   
     public void reverse() 
     { 
      Collections.reverse(getDataVector());    
     } 

     @Override 
     public void addRow(Object[] rowData) { 
      reverse(); 
      super.addRow(rowData); 
      reverse(); 
     } 
    } 
} 

您也可以撥打reverse()外的模式,以節省一些CPU時間。

+0

謝謝你天網,上面有一個解決方案 –

1

我找到了解決方案,謝謝各位!

通過將表格標題提取到BorderLayout.NORTH並向BorderLayout.SOUTH添加表格條目非常簡單。這可以使桌子從下到上增長。

表項可以通過這種方式進一步被條目裝飾器逆轉。

代碼如下片段:

final MyTableModel model = new ReverseOrderModelDecorator(new MyTableModel()); 
    final JTable table = new JTable(model); 
    JTableHeader header = table.getTableHeader(); 

    JPanel mainPanel = new JPanel(new BorderLayout()); 
    mainPanel.add(header, BorderLayout.NORTH); 

    mainPanel.add(table, BorderLayout.SOUTH); 

感謝你們!