我有一个随着用户输入数据而增长的表。我想做的是将表放在某种类型的容器中,并添加一个滚动条,在滚动时手动移动容器的视图。我不想使用JScrollPane,因为在过去的几天里,我一直在努力让它发挥作用。我刚刚发现它不适用于空布局,这似乎是唯一允许我的表正常打印的布局。因此,我放弃了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的行,代码仍然不起作用。事实上,表根本不会显示)。
我一直找不到问题,所以我使用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
}