java - 如何创建一个像 Internet Download Manager 应用程序中使用的表一样的 JTable?

标签 java swing jtable

是否可以从 Internet 下载管理器创建如下所示的 JTable

正如你所看到的,它显示图片中的最后一列是添加日期,它的右侧就像一个空列,右侧的那些行网格不是行,它的列不属于当我尝试 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 时,由于所选行在“添加的数据”列处结束,因此带有标题的实际列会得到此结果。

所以现在我希望表格填充空白空间,如第一张图片所示,并且当表格的列达到最大宽度时,仍然会创建一个水平滚动条,如下所示。

EDIT: Marco13 said - "Did you consider adding an empty column?"

是的,看看这个

空列是所有列的一部分,并且底部有一个水平滚动条,因为它在框架上展开,我想做的是......

  1. 调整框架大小时,除空列外,所有列都不会自动调整大小。
  2. 空列固定在框架的右侧,因此调整大小时不会留下空白 Pane 。
  3. 当所有带有标题的列在整个框架中可见时,不应出现水平滚动条。
  4. 无法选择空列及其中的行。

最佳答案

您需要使用以下代码来设置垂直和水平滚动条:

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();
    }
}

输出:

enter image description here

您可以从以下位置获得一些想法: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/

相关文章:

java - 直接调用 String 方法是否也会将该 String 存储在 String 池中?

java - Mac OS X 10.10 (Yosemite) Java Swing 外观和感觉?

java - JTextField 未更新

java - 了解 Graphics 2D 和旋转、drawRect 方法

java - 如何禁用 JTable 单元格上的鼠标单击事件?

java - JButton 的 Action 监听器在 JTable 中不起作用

java - 将文件列表从服务器发送到客户端的 JPanel

java - weblogic、jdk1.5内存问题

Java - 更改 JTable 中某些单元格的颜色

javascript - Java Selenium - JavaScriptExecutor - 参数属于非法类型 : driverFactory. CustomWebElement