2017-08-04 47 views
1

是否可以从Internet Download Manager创建一个JTable,如下所示:如何创建一个类似Internet Download Manager应用程序中使用的表的JTable?

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

所以现在我希望表填满UPS空的空间,如第一张图片,仍然会创建一个水平滚动条时,表的列达到最大宽度像下面。

编辑: Marco13说 - “?你有没有考虑增加一个空列”

是的,看看看看这个

空列的所有列的一部分,并且在底部水平滚动条,因为它是在帧展开,有什么我想要做的是...

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

当然。你需要JTable + JScrollBar – Blasanka

+0

问题的核心点是如何在右侧创建行的网格(而不是只留下空间)? – Marco13

+0

@ Marco13 - 确实如此。如您所见,右侧的那些行网格不是行,并且它的列不属于具有标题的实际列,因为所选行在“已添加数据”列中结束。 –

回答

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可能会有帮助。

最后,如果你想adjest列大小对其内容的宽度(该值的长度),则需要使用Table Column Adjuster

+0

仍然不符合我第一个问题的要求。你的代码就像我的第二个示例图像。 –

+0

@MangKanor我忘了添加代码来调整大小。现在我已经更新了答案, – Blasanka

相关问题