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

时间:2017-08-04 13:53:26

标签: java swing jtable

是否可以从Internet Download Manager创建如下所示的JTable

如您所见,它显示图片中的最后一列是添加的日期,右侧的列就像一个空列,右侧的行网格不是行,而它的列不属于由于所选行而带有标题的实际列在Data Added列结束,当我尝试table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);时,我得到了此结果。

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

  

编辑: Marco13说 - "您考虑过添加一个空栏吗?"

是的,看看这个

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

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

1 个答案:

答案 0 :(得分:1)

您需要在下面的代码中使用垂直和水平滚动条:

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