java如何使JTable列大小与内容精确(或紧密)匹配?
我的程序的输出在JTextArea
内的JScrollPane
中。看起来很恶心:
Created BinaryTree.java in I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\BinaryTree.java
Created DisplayStuff.java in I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\DisplayStuff.java
Created LinkedList.java in I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\LinkedList.java
Created Node.java in I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\Node.java
Created notes in I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\notes
Created TryBinaryTree.java in I:\Netbeans OLDIES but KEEPIES\BinaryTree\src\binarytree\TryBinaryTree.java
因此,我考虑将输出放入JTable
,假设在执行结束时调整列大小是一件简单的事情,并得到更像电子表格的结果,因此更具可读性:
我以前从未使用过JTable
,所以我尝试了一个简单的程序,看看我是否可以制作一个JTable
。是的。这是:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
public class TestJTable
{
static void init()
{
fraFrame = new JFrame();
fraFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dftTableModel = new DefaultTableModel(0 , 4);
tblOutput = new JTable(dftTableModel);
scrOutput = new JScrollPane(tblOutput);
colMdl = tblOutput.getColumnModel();
fraFrame.add(scrOutput); // NOTE: add the SCROLL PANE, not table
fraFrame.setVisible(true);
fraFrame.pack();
}
public static void main(String[] args)
{
init();
tblOutput.doLayout();
dftTableModel.addRow(new Object[]{"Action", "Filename", "", "Path"});
for (int i = 0; i < 100; i++)
{
String c0 = Utilities.Utilities.repeat("x", (int) (Math.random()*50));
dftTableModel.addRow(new Object[]{((Math.sin(i)) > 0 ? "Updated" : "Created"),
c0, "in", c0});
k = Math.max(k, c0.length());
}
}
static int k;
static JFrame fraFrame ;
static JTable tblOutput;
static DefaultTableModel dftTableModel;
static JScrollPane scrOutput;
static TableColumnModel colMdl;
}
以下是输出:
我希望能够完全按照我的需要设置列的大小
我用大小、首选大小、表格大小、自动调整大小(和不调整大小)旋转了一个小时,这让我在程序的不同部分尝试了以下不同的组合,没有一个产生令人满意的结果,尽管取出pack
有所帮助:
fraFrame.setSize(1400, 600);
tblOutput.setSize(1500,400);
colMdl.getColumn(0).setPreferredWidth(15);
colMdl.getColumn(1).setPreferredWidth(10*k);
colMdl.getColumn(2).setPreferredWidth(5);
colMdl.getColumn(3).setPreferredWidth(10*k);
所以我不得不问:
(a)具体来说,考虑到我知道k
是Filename
中的字符数,并且'Pathcolumns, how can I make the contents of those columns be exactly fit their columns? (I assume
字体大小将进入图片。)
(b)通常,如何更改JTable
中的列大小?例如,一列总是说“in”。如何使专栏不超过这个宽度
编辑
多亏了@camickr,无论是在上面的测试程序中,还是在下面的真实输出中,都很容易获得所需的输出:
# 1 楼答案
看看Table Column Adjuster
可以根据以下内容设置列宽:
该类还支持其他功能,以便在数据更改时动态调整大小
或者您可以使用提供的基本代码,它只使用JTable的
prepareRenderer(...)
方法来确定最大宽度编辑: