Swinghacks——JTable根据内容调整列宽

Swinghacks——JTable根据内容调整列宽,第1张

JTable默认情况下 列宽是固定值 如下

若要根据内容来调整列宽 那首先要知道内容占用多少宽度 代码如下

[java]

int maxwidth = ;

for (int row= ; row<table getRowCount(); row++) {

TableCellRenderer rend = table getCellRenderer (row col);

Object value = table getValueAt (row col);

Component p =

rend getTableCellRendererComponent (table

value

false

false

row

col);

maxwidth = Math max (p getPreferredSize() width

maxwidth);

}

这段代码是在计算列内容中的最大值maxwidth 其原理是这样的

通过数据模型TableModel获取该列某行的值数据

[java]

Object value = table getValueAt (row col);

用渲染方法把值数据转换成显示的组件 就是这个方法getTableCellRendererComponent

如果不了解MVC模型和JTable的渲染器的话 建议看这篇文章

getTableCellRendererComponent方法应该是jtable调用来把数据模型的数据渲染成ponent 然后显示在jtable的单元格上 所以我们看到的jtable单元格都是这个方法返回的ponent

现在主动调用getTableCellRendererComponent方法 获取到要显示的ponent 然后getPerferredSize 再筛选出最大值就行

最后把筛选出的最大值设置为column的宽度即可

上图已经是根据内容调整列宽了 但是还有一个缺点就是第一列 只考虑到了列内容的宽度 但是没有考虑到表头的内容宽度

不过思路也是一样的 获取表头的数据模型 和 渲染器 然后主动构造出表头的ponent获取PerferredSize 再判断下列宽值即可

[java]

TableCellRenderer headerRenderer = column getHeaderRenderer();

if (headerRenderer == null)

headerRenderer = table getTableHeader() getDefaultRenderer();

Object headerValue = column getHeaderValue();

Component headerComp =

headerRenderer getTableCellRendererComponent (table

headerValue

false

false

col);

maxwidth = Math max (maxwidth

headerComp getPreferredSize() width);

lishixinzhi/Article/program/Java/ky/201311/28729

jtable默认单击表头是没有什么反应的 对于使用过excel的人来说会很失望

要让单击表头就选中该列也很简单 直接上代码

[java]

import javax swing ;

import javax swing table ;

import java awt event ;

public class ColumnSelectableJTable extends JTable {

public ColumnSelectableJTable (Object[][] items Object[] headers) {

super (items headers)

//设置列选择模式

setColumnSelectionAllowed (true)

setRowSelectionAllowed (false)

final JTableHeader header = getTableHeader()

//表头增加监听

header addMouseListener (new MouseAdapter() {

public void mouseReleased (MouseEvent e) {

if (! e isShiftDown())

clearSelection()

//获取点击的列索引

int pick = lumnAtPoint(e getPoint())

//设置选择模型

addColumnSelectionInterval (pick pick)

}

})

}

lishixinzhi/Article/program/Java/Javascript/201311/25288

import javaawt;

import javaawtevent;

import javaxswing;

public class TestXun extends JFrame implements ActionListener{

private String[] str = {"111","222","333","444"};

private JComboBox jcb = new JComboBox(str);

private JLabel jl = new JLabel("此处显示选择内容");

public TestXun(){

thisintialFrame();

}

public void intialFrame(){

Toolkit toolkit = thisgetToolkit();

Dimension dimension = toolkitgetScreenSize();

int width = dimensionwidth;

int height = dimensionheight;

thissetLayout(null);

thissetBounds(width/2-300, height/2-300, 600, 600);

jcbsetBounds(250,250,50,30);

jcbaddActionListener(this);

thisadd(jcb);

jlsetBounds(100, 400, 200, 30);

thisadd(jl);

thissetVisible(true);

}

public static void main(String args[]){

TestXun tx = new TestXun();

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String str_jcb =(String)jcbgetSelectedItem();

thisjlsetText(str_jcb);

}

}

以上就是关于Swinghacks——JTable根据内容调整列宽全部的内容,包括:Swinghacks——JTable根据内容调整列宽、Swinghacks:JTable单击表头选中列、swing中如何获取到可编辑的下拉列表的值,要获得编辑后输入的值,如何得到等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9757328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存