JTable显示列名

Nonetracer 2009-07-13 05:06:48
代码示例如下:

String[] colNames = ...;
String[][] rows = ...;
JTable table = new JTable(rows, colNames);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);


如果列名很多很长,就会以...显示,我想把他们展开,横向滚动条可以滚动,该如何设置?设了scrollPane.setHorizontalScrollBarPolicy()也不行。

谢谢
...全文
329 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddyouyue 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nonetracer 的回复:]
7楼,ColumnResizer对象是哪个包里的?
[/Quote]
自己写的啊...
chosen0ne 2009-08-17
  • 打赏
  • 举报
回复

private void setHeader(JTable table){
TableColumnModel colModel=table.getColumnModel();
for(int i=0;i<colModel.getColumnCount();i++){
TableColumn col=colModel.getColumn(i)
TableCellRenderer headerRenderer=col.getHeaderRenderer();//获得列标题的渲染器
if(headerRenderer==null)//如果没有手动设置列标题的渲染器,则采用默认的渲染器
headerRenderer=table.getTableHeader().getDefaultRenderer();
Object headerValue=col.getHeaderValue();
//通过渲染器,得到该单元格应该绘制的组件,这样就可以得到该组件的大小
Component headerComp=headerRenderer.getTableCellRendererComponent(table,headerValue,false,false,0,col);
column.setPreferredWidth(headerComp.getPreferredSize().width);//用获得的组件的宽度设置该列宽度
}


上面那个循环的地方写错了,以为可以用foreach呢,呵呵。
chosen0ne 2009-08-17
  • 打赏
  • 举报
回复

private void setHeader(JTable table){
TableColumnModel colModel=table.getColumnModel();
for(TableColumn col:colModel){
TableCellRenderer headerRenderer=col.getHeaderRenderer();//获得列标题的渲染器
if(headerRenderer==null)//如果没有手动设置列标题的渲染器,则采用默认的渲染器
headerRenderer=table.getTableHeader().getDefaultRenderer();
Object headerValue=col.getHeaderValue();
//通过渲染器,得到该单元格应该绘制的组件,这样就可以得到该组件的大小
Component headerComp=headerRenderer.getTableCellRendererComponent(table,headerValue,false,false,0,col);
column.setPreferredWidth(headerComp.getPreferredSize().width);//用获得的组件的宽度设置该列宽度
}
}

添加这个函数,可以满足楼主的要求
土地公公 2009-08-17
  • 打赏
  • 举报
回复
支持7楼。
Nonetracer 2009-07-20
  • 打赏
  • 举报
回复
7楼,ColumnResizer对象是哪个包里的?
ddyouyue 2009-07-15
  • 打赏
  • 举报
回复
SWING HACKS 里面的例子,运行后3秒后看变化
import javax.swing.UIManager;
import javax.swing.SwingUtilities;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import javax.swing.table.DefaultTableModel;
import java.awt.Component;
public class ColumnResizer{
public static void adjustColumnPreferredWidths(JTable table){
TableColumnModel columnModel=table.getColumnModel();
for(int col=0;col<table.getColumnCount();col++){
int maxWidth=0;
for(int row=0;row<table.getRowCount();row++){
TableCellRenderer rend=table.getCellRenderer(row,col);
Object value=table.getValueAt(row,col);
Component comp=rend.getTableCellRendererComponent(table,value,false,false,row,col);
maxWidth=Math.max(comp.getPreferredSize().width,maxWidth);
}
TableColumn column=columnModel.getColumn(col);
TableCellRenderer headRenderer=column.getHeaderRenderer();
if(headRenderer==null)
headRenderer=table.getTableHeader().getDefaultRenderer();
Object headValue=column.getHeaderValue();
Component comp=headRenderer.getTableCellRendererComponent(table,headValue,false,false,0,col);
maxWidth=Math.max(comp.getPreferredSize().width,maxWidth);
column.setPreferredWidth(maxWidth);
column.setMinWidth(comp.getPreferredSize().width);
}
}
public static void main(String[] args){
final Object[][] TABLE_DATA={
{new Integer(1),"OnJava","www.onjava.com"},
{new Integer(2),"Elliott' site","www.xiao.com"},
{new Integer(3),"qtj","www.ddyouyue/sina.com.cn/asp.html"}
};
final Object[] COLUMN_NAME={"count","name","url"};
try{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
catch(Exception e){}
DefaultTableModel mod=new DefaultTableModel(TABLE_DATA,COLUMN_NAME);
JTable table=new JTable(mod);
JScrollPane pane=new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JFrame frame=new JFrame();
frame.getContentPane().add(pane);
frame.setSize(400,500);
//frame.pack();
frame.setVisible(true);
try{
Thread.sleep(3000);
}
catch(InterruptedException e){
System.out.println(e.toString()) ;
}
final JTable ftable=table;
SwingUtilities.invokeLater(new Runnable(){
public void run(){
ColumnResizer.adjustColumnPreferredWidths(ftable);
ftable.repaint();
}
});

}
}
alexjack1210 2009-07-15
  • 打赏
  • 举报
回复
scrollPane好像是没有设置它宽度的吧!你不防去设置一下他的窗体大小呀!把窗体的宽度设大点试试吧!
Nonetracer 2009-07-15
  • 打赏
  • 举报
回复
默认就是加上的,但不显示
LazyCat2222 2009-07-15
  • 打赏
  • 举报
回复
还有一个方法吧,一个行滚动 一个列滚动。。
sd01397055 2009-07-14
  • 打赏
  • 举报
回复
学习
yuhongpingimu 2009-07-13
  • 打赏
  • 举报
回复
GUI的都不太懂啊~
noone_1983 2009-07-13
  • 打赏
  • 举报
回复
学习

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧