java-如何使JTable列大小完全(或紧密)适合内容?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何使JTable列大小完全(或紧密)适合内容?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4090字,纯文字阅读大概需要6分钟。
内容图文
![java-如何使JTable列大小完全(或紧密)适合内容?](/upload/InfoBanner/zyjiaocheng/692/85310178b0b84885815f81b7d3641b7d.jpg)
我程序的输出在JScrollPane内的JTextArea中.看起来很讨厌:
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;
}
这是输出:
我希望能够完全根据需要设置列的大小.
我花了一个小时对车轮进行尺寸,首选尺寸,工作台尺寸,自动调整大小(以及不调整大小)的旋转,这使我在程序的不同部分尝试了以下不同组合的方法,但收效不佳,尽管取出包装有些帮助:
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是“文件名”和“路径列”中的字符数,如何使这些列的内容完全适合其列? (我认为字体大小会进入图片.)
(b)通常,如何更改JTable中的列大小?例如,一列将始终显示“ in”.如何使列不超过该宽度?
编辑
感谢@camickr,在上面的测试程序和实际的下面的输出中都可以轻松获得所需的输出:
解决方法:
您可以根据以下内容设置列宽:
>列标题
>列每一行中的数据
>较大的标题或数据
该类还支持其他功能,以允许在更改数据时动态调整大小.
或者,您可以使用提供的基本代码,该代码仅使用JTable的prepareRenderer(…)方法来确定最大宽度.
JTable table = new JTable( ... );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
for (int column = 0; column < table.getColumnCount(); column++)
{
TableColumn tableColumn = table.getColumnModel().getColumn(column);
int preferredWidth = tableColumn.getMinWidth();
int maxWidth = tableColumn.getMaxWidth();
for (int row = 0; row < table.getRowCount(); row++)
{
TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
Component c = table.prepareRenderer(cellRenderer, row, column);
int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
preferredWidth = Math.max(preferredWidth, width);
// We've exceeded the maximum width, no need to check other rows
if (preferredWidth >= maxWidth)
{
preferredWidth = maxWidth;
break;
}
}
tableColumn.setPreferredWidth( preferredWidth );
}
编辑:
I was hoping that knowing the font size and number of characters
FontMetrics fm = table.getFontMetrics( table.getFont() );
int charWidth = fm.stringWidth("a");
System.out.println( charWidth );
内容总结
以上是互联网集市为您收集整理的java-如何使JTable列大小完全(或紧密)适合内容?全部内容,希望文章能够帮你解决java-如何使JTable列大小完全(或紧密)适合内容?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。