是否可以从 Internet 下载管理器创建如下所示的 JTable
?
正如你所看到的,它显示图片中的最后一列是添加日期,它的右侧就像一个空列,右侧的那些行网格不是行,它的列不属于当我尝试 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
时,由于所选行在“添加的数据”列处结束,因此带有标题的实际列会得到此结果。
所以现在我希望表格填充空白空间,如第一张图片所示,并且当表格的列达到最大宽度时,仍然会创建一个水平滚动条,如下所示。
EDIT: Marco13 said - "Did you consider adding an empty column?"
是的,看看这个
空列是所有列的一部分,并且底部有一个水平滚动条,因为它在框架上展开,我想做的是......
- 调整框架大小时,除空列外,所有列都不会自动调整大小。
- 空列固定在框架的右侧,因此调整大小时不会留下空白 Pane 。
- 当所有带有标题的列在整个框架中可见时,不应出现水平滚动条。
- 无法选择空列及其中的行。
最佳答案
您需要使用以下代码来设置垂直和水平滚动条:
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
在 JFrame
调整大小时调整表格大小。您需要覆盖 getScrollableTracksViewportWidth() .
完整代码:
import java.awt.CardLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
public class TableExample {
JFrame frame;
JTable table;
JScrollPane scrollPane;
public TableExample(){
initComp();
}
public void initComp(){
frame = new JFrame();
frame.setSize(500, 400);
frame.setLayout(new CardLayout());
table = new JTable(100, 5){
public boolean getScrollableTracksViewportWidth(){
return getPreferredSize().width < getParent().getWidth();
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//table.setFillsViewportHeight(true);
//table.setPreferredScrollableViewportSize(new Dimension(300, 200));
scrollPane = new JScrollPane(table);
scrollPane.setOpaque(true);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.add(scrollPane);
//-----this part from doc
TableColumn column = null;
for (int i = 0; i < 5; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 4) {
column.setPreferredWidth(200); //third column is bigger
} else {
column.setPreferredWidth(100);
}
}
//----
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new TableExample();
}
}
输出:
您可以从以下位置获得一些想法:How to make JTable both AutoResize and horizontall scrollable?还有this question @camickr answer可能有帮助。
最后,如果您想将列大小调整为其内容宽度(值的长度),则需要使用 Table Column Adjuster
关于java - 如何创建一个像 Internet Download Manager 应用程序中使用的表一样的 JTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508654/