jtable 列问题
需求:准备写一个jtable然后更改她的样式后续所有的table都继承这个jtable;问题:展现出来的table无column列名称;
代码展现:
package gov.service.product.gfmis.ResultDialogModel;
import gov.service.common.dao.GeneralDAO;
import gov.service.common.util.Util;
import gov.service.product.gfmis.balance.ui.BalanceMainUI;
import gov.service.product.manager.ComponentManager;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
public class Test extends JTable{
private static GeneralDAO dao = ComponentManager.generalDAO;
public Test()
{
JScrollPane jsp=new JScrollPane();
jsp.setViewportView(this);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setRowHeight(20);
table.setFont(new Font("微软儒雅",Font.PLAIN,14));
int columnCount=table.getColumnModel().getColumnCount();
System.out.println(columnCount);
for(int i=0;i<columnCount;i++)
{
int width=table.getColumnModel().getColumn(i).getWidth();
table.getColumnModel().getColumn(i).setPreferredWidth(width+20);
}
JTableHeader head=new JTableHeader();
head.setFont(new Font("微软雅黑",Font.PLAIN,16));
head.setPreferredSize(new Dimension(head.getWidth(),25));
getModel();
}
protected void getModel() {
ThreadGroup group = Thread.currentThread().getThreadGroup();// 获得当前线程所在线程组
Thread[] threads = new Thread[group.activeCount()];// 使用数组保存活动状态的线程
group.enumerate(threads);// 获得所有线程
DefaultTableModel model = (DefaultTableModel) this.getModel(); // 获得表格模型
model.setRowCount(0); // 清空表格模型中的数据
model.setColumnIdentifiers(new Object[] { "线程ID", "线程名称", "优先级" }); // 定义表头
for (Thread thread : threads) {// 增加行数据
model.addRow(new Object[] { thread.getId(), thread.getName(), thread.getPriority() });
}
this.setModel(model);// 更新表格模型
}
public static void main(String[] args) {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setBounds(100, 100, 800, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content=new JPanel();
content.add(new Test());
frame.setContentPane(content);
frame.setVisible(true);
frame.setResizable(true);
}
});
}
}
展现结果:见附件
----------------解决方案--------------------------------------------------------
debug找到关键代码,这样不好弄啊,这里面还引用了其他类,这想运行还要自己写其他类啊,你找出问题点对应的代码试试
----------------解决方案--------------------------------------------------------
int columnCount=table.getColumnModel().getColumnCount();
System.out.println(columnCount);
这句代码,打印的值有吗
----------------解决方案--------------------------------------------------------
好难啊
----------------解决方案--------------------------------------------------------
回复 3楼 java小蚂蚁
这个是有值的,我在setModel()之后在获取model循环打印columnName都是可以的。可是显示的时候就是没有 ----------------解决方案--------------------------------------------------------
回复 5楼 xioun
哪里有值的话,证明你设置成功了,显示的时候你调用get方法不会没有值啊,会不会是你调用的次序有问题,你的值,在哪设进去的,在哪显示的。你这里涉及多线程,你看下,是不是线程问题,调用次序 ----------------解决方案--------------------------------------------------------
说实话,这代码没怎么看懂,总觉得有些乱,你main函数里面就一句话,怎么显示表格啊,
而且代码不全,
----------------解决方案--------------------------------------------------------
线程组已经不推荐用了,现在都用线程池,线程组容易引发很多问题。
----------------解决方案--------------------------------------------------------