JTable自动调整大小到JScrollPane的高度和宽度

时间:2015-01-28 13:56:39

标签: java swing jtable jscrollpane

我一直在网上阅读,试图找到解决问题的方法。 谁能帮我。当滚动条没有足够的行显示时,如何自动调整Jtable的高度以适合父容器。谢谢

更新:显示我的问题的代码,以及建议的解决方案如何帮助。谢谢

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class t extends JFrame {

    private JPanel contentPane;
    private JTable table;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    t frame = new t();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public t() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        JScrollPane scrollPane = new JScrollPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);

        table = new JTable(10,10);
        table. setFillsViewportHeight( true );
        scrollPane.setViewportView(table);
    }

}

1 个答案:

答案 0 :(得分:1)

  

如果没有足够的行显示滚动条,如何自动调整Jtable的高度以适应父容器。

我认为你在寻找:

table. setFillsViewportHeight( true );

编辑:

  

但似乎没有效果......

在您的示例中添加以下代码行:

contentPane.setBackground(Color.RED);
scrollPane.getViewport().setBackground(Color.BLUE);

你会看到一个红色边框。

然后删除:

table. setFillsViewportHeight( true );

你会看到红色和蓝色,表示桌面高度最初增加了。

如果你期望看到空的细胞被涂上,那么它就不会起作用。该表只能绘制模型中的内容。如果要绘制更多数据行,则需要向模型添加更多行数据。如果高度降低,则需要从模型中删除数据。

当然,现在您需要跟踪哪些是"有效"数据行,是"填充"数据行。因此,您需要创建一个自定义TableModel来管理它。然后,您将向表中添加ComponentListener以处理表中的高度更改,然后对TableModel进行操作。