大家早上好! 小妹遇到一些问题 请教好心人:怎么实现JTable多表头? 本帖最后由 xierong2011 于 2011-08-24 09:28:59 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 图片 http://hi.csdn.net/space-10127580-do-album-picid-899511-goto-down.html sno是一个Label,上面两个是两个Label,放在JPanle里面,下面三个同理,后面又是一个和两个,从大小你都可以看出来是单独做的撒 import java.awt.BorderLayout; 002 import java.awt.Color; 003 import java.awt.event.ActionEvent; 004 import java.awt.event.ActionListener; 005 import java.util.Vector; 006 007 import javax.swing.DefaultCellEditor; 008 import javax.swing.JButton; 009 import javax.swing.JComboBox; 010 import javax.swing.JFrame; 011 import javax.swing.JPanel; 012 import javax.swing.JScrollPane; 013 import javax.swing.JTable; 014 import javax.swing.table.AbstractTableModel; 015 import javax.swing.table.TableColumnModel; 016 017 /** 018 * JTable的实用小例子 019 * @author 五斗米 <如转载请保留作者和出处> 020 * @blog http://blog.csdn.net/mq612 021 */ 022 023 public class Test { 024 private JFrame frame = null; 025 026 private JTable table = null; 027 028 private Table_Model model = null; 029 030 private JScrollPane s_pan = null; 031 032 private JButton button_1 = null, button_2 = null, button_3 = null; 033 034 private JPanel pane = null; 035 036 public Test() { 037 frame = new JFrame("JTableTest"); 038 pane = new JPanel(); 039 button_1 = new JButton("清除数据"); 040 button_1.addActionListener(new ActionListener() { 041 public void actionPerformed(ActionEvent e) { 042 removeData(); 043 } 044 }); 045 button_2 = new JButton("添加数据"); 046 button_2.addActionListener(new ActionListener() { 047 public void actionPerformed(ActionEvent e) { 048 addData(); 049 } 050 }); 051 button_3 = new JButton("保存数据"); 052 button_3.addActionListener(new ActionListener() { 053 public void actionPerformed(ActionEvent e) { 054 saveData(); 055 } 056 }); 057 pane.add(button_1); 058 pane.add(button_2); 059 pane.add(button_3); 060 model = new Table_Model(20); 061 table = new JTable(model); 062 table.setBackground(Color.white); 063 String[] age = { "16", "17", "18", "19", "20", "21", "22" }; 064 JComboBox com = new JComboBox(age); 065 TableColumnModel tcm = table.getColumnModel(); 066 tcm.getColumn(3).setCellEditor(new DefaultCellEditor(com)); 067 tcm.getColumn(0).setPreferredWidth(50); 068 tcm.getColumn(1).setPreferredWidth(100); 069 tcm.getColumn(2).setPreferredWidth(50); 070 071 s_pan = new JScrollPane(table); 072 073 frame.getContentPane().add(s_pan, BorderLayout.CENTER); 074 frame.getContentPane().add(pane, BorderLayout.NORTH); 075 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 076 frame.setSize(300, 200); 077 frame.setVisible(true); 078 079 } 080 081 private void addData() { 082 model.addRow("李逵", true, "19"); 083 table.updateUI(); 084 } 085 086 private void removeData() { 087 model.removeRows(0, model.getRowCount()); 088 table.updateUI(); 089 } 090 091 // 保存数据,暂时是将数据从控制台显示出来 092 private void saveData() { 093 int col = model.getColumnCount(); 094 int row = model.getRowCount(); 095 for (int i = 0; i < col; i++) { 096 System.out.print(model.getColumnName(i) + "\t"); 097 } 098 System.out.print("\r\n"); 099 for (int i = 0; i < row; i++) { 100 for (int j = 0; j < col; j++) { 101 System.out.print(model.getValueAt(i, j) + "\t"); 102 } 103 System.out.print("\r\n"); 104 } 105 System.out.println("------------------------------------"); 106 } 107 108 public static void main(String args[]) { 109 new Test(); 110 System.out.println("按下保存按钮将会把JTable中的内容显示出来\r\n------------------------------------"); 111 } 112 113 } 114 115 116 /** 117 * TableModel类,继承了AbstractTableModel 118 * @author 五斗米 119 * 120 */ 121 class Table_Model extends AbstractTableModel { 122 123 private static final long serialVersionUID = -7495940408592595397L; 124 125 private Vector content = null; 126 127 private String[] title_name = { "ID", "姓名", "性别", "年龄" }; 128 129 public Table_Model() { 130 content = new Vector(); 131 } 132 133 public Table_Model(int count) { 134 content = new Vector(count); 135 } 136 137 public void addRow(String name, boolean sex, String age) { 138 Vector v = new Vector(4); 139 v.add(0, new Integer(content.size())); 140 v.add(1, name); 141 v.add(2, new Boolean(sex)); 142 v.add(3, age); 143 content.add(v); 144 } 145 146 public void removeRow(int row) { 147 content.remove(row); 148 } 149 150 public void removeRows(int row, int count) { 151 for (int i = 0; i < count; i++) { 152 if (content.size() > row) { 153 content.remove(row); 154 } 155 } 156 } 157 158 /** 159 * 让表格中某些值可修改,但需要setValueAt(Object value, int row, int col)方法配合才能使修改生效 160 */ 161 public boolean isCellEditable(int rowIndex, int columnIndex) { 162 if (columnIndex == 0) { 163 return false; 164 } 165 return true; 166 } 167 168 /** 169 * 使修改的内容生效 170 */ 171 public void setValueAt(Object value, int row, int col) { 172 ((Vector) content.get(row)).remove(col); 173 ((Vector) content.get(row)).add(col, value); 174 this.fireTableCellUpdated(row, col); 175 } 176 177 public String getColumnName(int col) { 178 return title_name[col]; 179 } 180 181 public int getColumnCount() { 182 return title_name.length; 183 } 184 185 public int getRowCount() { 186 return content.size(); 187 } 188 189 public Object getValueAt(int row, int col) { 190 return ((Vector) content.get(row)).get(col); 191 } 192 193 /** 194 * 返回数据类型 195 */ 196 public Class getColumnClass(int col) { 197 return getValueAt(0, col).getClass(); 198 } 199 200 } 妹子 我以前在学校也用java swing jtable 做过的啊 可惜哥哥电脑没带公司来 要不发个给你... 混分滴swing问题不会,web还可以。 table里面套table, 或者是 table的表头里放多个Label 显示边框, 应该都可以实现吧 1 import javax.swing.*;2 import java.awt.*;3 import java.awt.event.*;4 import java.util.*;5 public class SimpleTable{6 public SimpleTable(){7 JFrame f=new JFrame();8 Object[][] playerInfo={9 {"阿呆",new Integer(66),new Integer(32),new Integer(98),new Boolean(false)},10 {"阿呆",new Integer(82),new Integer(69),new Integer(128),new Boolean(true)},11 }; 12 String[] Names={"姓名","语文","数学","总分","及格"};13 JTable table=new JTable(playerInfo,Names);14 table.setPreferredScrollableViewportSize(new Dimension(550,30));15 JScrollPane scrollPane=new JScrollPane(table);16 f.getContentPane().add(scrollPane,BorderLayout.CENTER);17 f.setTitle("Simple Table");18 f.pack();19 f.show();20 f.addWindowListener(new WindowAdapter() {21 public void windowClosing(WindowEvent e) {22 System.exit(0);23 }24 });24 } 25 public static void main(String[] args){26 SimpleTable b=new SimpleTable();27 }28 } 表格由两部份组成:分别是行标题(Column Header)与行对象(Column Object).利用JTable所提供的getTableHeader()方法取得行标题。在这个例子中,我们将JTable放在JScrollPane中,这种做法可以将Column Header与Colmn Object完整的显示出来,因为JScrollPane会自动取得Column Header.但如果文坛读者将上面第15行去掉并修改第16行: f.getContentPane().add(table,BorderLayout.CENTER); 则运行结果你会发现Column Header不见了。 如果你不想用JScrollPane,要解决这个问题,你必须将程序修改如下: JTable table=new JTable(p,n); table.setPreferredScrollableViewportSize(new Dimension(550,30)); f.getContentPane().add(table.getTableHeader(),BorderLayout.NORTH); f.getContentPane().add(table,BorderLayout.CENTER); 运行结果就会跟之前一样有行标题了. ls的代码没发现会有多行header 搜索到这个 JTable的表头合并 你用的什么软件?我记得当初我们用netbean可以拖出来的。好像是记的不太清楚了 eclipse 工具 我们正学 Java SE swing 方面的 看看这篇文章对你有帮助http://www.blogjava.net/zeyuphoenix/archive/2010/04/18/318690.html 这个我在网上 也看过了 但是小妹刚开始学这个 仅凭这个还做不出来呀 你能否帮我做个简单一点的多表头JTable ? 谢谢啦 看看这个,也许是你要的答案!http://www.java2s.com/Code/Java/Swing-Components/multipleRowHeaderExample.htm 不是 只不过做一个 多表头的JTable 无需从数据库调取数据呀 一句小妹儿,引得楼上诸多闷骚无限遐想。我算是你的大叔级,建议你也可以去stackoverflow看看。那个论坛,嗯,非常有特色。各色技术阿呆在里面解决各种各样的难题。 java小应用程序的图标! java Swing程序运行启动时播放一小段音乐 关于JTable鼠标事件的问题??? 如何在jsp中上传图片时压缩图片, 请教问题!! 虚拟机能否自动判断操作系统的类型? 请教高手如何解决.properties文件中文乱码问题 请教高手,JAVA中如何修改OS的系统时钟,有效一定给分! 谁能给我点eclipse的使用的资料啊?或者网站。谢谢! 请问用鼠标画的图形这样才能刷新。 java写文件? 求助,关于serializable的问题
撒
swing问题不会,web还可以。
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.util.*;
5 public class SimpleTable{
6 public SimpleTable(){
7 JFrame f=new JFrame();
8 Object[][] playerInfo={
9 {"阿呆",new Integer(66),new Integer(32),new Integer(98),new Boolean(false)},
10 {"阿呆",new Integer(82),new Integer(69),new Integer(128),new Boolean(true)},
11 };
12 String[] Names={"姓名","语文","数学","总分","及格"};
13 JTable table=new JTable(playerInfo,Names);
14 table.setPreferredScrollableViewportSize(new Dimension(550,30));
15 JScrollPane scrollPane=new JScrollPane(table);
16 f.getContentPane().add(scrollPane,BorderLayout.CENTER);
17 f.setTitle("Simple Table");
18 f.pack();
19 f.show();
20 f.addWindowListener(new WindowAdapter() {
21 public void windowClosing(WindowEvent e) {
22 System.exit(0);
23 }
24 });
24 }
25 public static void main(String[] args){
26 SimpleTable b=new SimpleTable();
27 }
28 }
表格由两部份组成:分别是行标题(Column Header)与行对象(Column Object).利用JTable所提供的getTableHeader()方法取得
行标题。在这个例子中,我们将JTable放在JScrollPane中,这种做法可以将Column Header与Colmn Object完整的显示出来,因为
JScrollPane会自动取得Column Header.但如果文坛读者将上面第15行去掉并修改第16行:
f.getContentPane().add(table,BorderLayout.CENTER);
则运行结果你会发现Column Header不见了。
如果你不想用JScrollPane,要解决这个问题,你必须将程序修改如下:
JTable table=new JTable(p,n);
table.setPreferredScrollableViewportSize(new Dimension(550,30));
f.getContentPane().add(table.getTableHeader(),BorderLayout.NORTH);
f.getContentPane().add(table,BorderLayout.CENTER);
运行结果就会跟之前一样有行标题了.
http://www.blogjava.net/zeyuphoenix/archive/2010/04/18/318690.html
这个我在网上 也看过了 但是小妹刚开始学这个 仅凭这个还做不出来呀 你能否帮我做个简单一点的多表头JTable ? 谢谢啦
不是 只不过做一个 多表头的JTable 无需从数据库调取数据呀
我算是你的大叔级,建议你也可以去stackoverflow看看。那个论坛,嗯,非常有特色。各色技术阿呆在里面解决各种各样的难题。