JScrollPane不会向动态增长的表添加滚动条

时间:2016-05-02 18:28:59

标签: java swing scroll scrollbars

我有一个表,随着用户输入数据而增长。我要做的是将表放在某种类型的容器中,并添加一个滚动条,在滚动时手动移动容器的视图。我不想使用JScrollPane因为我过去几天一直在努力让它工作。我刚刚发现它无法使用null布局,这似乎是唯一允许我的表正常打印的布局。因此,我抛出了一个JScrollPane的想法,而我试图实现自己编程滚动条的想法,这会转移溢出容器内部的视图。到目前为止,我在网上找不到任何可以移动java容器视图的内容。关于如何做到这一点的任何想法?

更新:

根据建议,我将尝试使用JScrollPane进行滚动。所以新问题是:为什么以下代码不起作用?

背景:DataTable是我设计的一个类,它扩展了java.awt.Container,它包含一个充满JLabel的网格。此类包含addRow和addCol等方法,这些方法增加了容器的大小以添加单元格,此类还包含用于设置标签值的方法。

我要做的是将我的类放在具有静态宽度和高度的JScrollPane中,可以滚动它以查看整个表的增长。

DataTable table = new DataTable(1,4,100,30); //creates table with 1 row (30px tall) and 4 columns (100px wide each)
table.setLocation(0, 0);
JScrollPane scroll = new JScrollPane(table);//scroll pane
scroll.setLayout(null);
scroll.setBounds(10, 50, 500, 100);
scroll.add(table);
Frame frame = new Frame();
frame.add(scroll);
frame.setLayout(null);
frame.setSize(600, 500);
frame.setVisible(true);
for ( int i=0 ; i<20 ; i++ ) {
    table.addRow();//add twenty rows to table
}

当我运行此代码时,不会显示滚动条。为什么?我该如何解决这个问题? (即使我删除了将JSrollPane的布局设置为null的行,代码仍然不起作用。实际上,表格根本没有显示。)

1 个答案:

答案 0 :(得分:0)

我无法找到问题所以我找到了使用java.awt.ScrollPane的备用解决方案。我对DataTable所做的唯一改变是它现在扩展了java.awt.Panel。

DataTable table = new DataTable(1,4,100,30); //creates table with 1 row (30px tall) and 4 columns (100px wide each)
//table extends java.awt.Panel and it consists a 2D array of Labels which contain text
//class has methods for adding rows and cols, and methods for setting values etc.
table.setLocation(0, 0);
ScrollPane scroll = new ScrollPane();//scroll pane
scroll.setBounds(10, 50, 500, 100);
scroll.add(table);
Frame frame = new Frame();
frame.add(scroll);
frame.setLayout(null);
frame.setSize(600, 500);
frame.setVisible(true);
for ( int i=0 ; i<20 ; i++ ) {
    table.addRow();//add twenty rows to table
}