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中如何获取到可编辑的下拉列表的值,要获得编辑后输入的值,如何得到等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)