如何从下到上设置JTable增长

时间:2016-07-24 21:59:49

标签: java swing

我正在寻找一种从从底部到顶部填充JTable的方法,例如:

1行:

[clean space]
row1

添加第二行后:

[clean space]
row2
row1

看看ComponentOrientation - 似乎只允许从右到左但不允许从下到上

使用LookAndFill

也看不到任何方法

有什么想法吗?

2 个答案:

答案 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);
谢谢你们!

答案 1 :(得分: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时间。