JTable中合并单元格.docx
《JTable中合并单元格.docx》由会员分享,可在线阅读,更多相关《JTable中合并单元格.docx(13页珍藏版)》请在冰豆网上搜索。
JTable中合并单元格
/*
*SimpleTableDemo.javaisa1.4applicationthatrequiresnootherfiles.
*/
//编辑的时候直接从覆盖原有内容
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjava.awt.Dimension;
importjava.awt.GridLayout;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.util.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.*;
importjava.io.*;
importjava.util.*;
publicclassCombineextendsJPanel{
privatebooleanDEBUG=false;
JTabletable;
publicCombine(){
super(newGridLayout(1,0));
table=newJTable(newMyTableModel());
table.setPreferredScrollableViewportSize(newDimension(500,70));
///////////////////////////////////////////////////////////
table.setDefaultEditor(String.class,newSelEditor());
//Createthescrollpaneandaddthetabletoit.
JScrollPanescrollPane=newJScrollPane(table);
//Addthescrollpanetothispanel.
add(scrollPane);
}
/**
*CreatetheGUIandshowit.Forthreadsafety,
*thismethodshouldbeinvokedfromthe
*event-dispatchingthread.
*/
privatestaticvoidcreateAndShowGUI(){
//Makesurewehavenicewindowdecorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Createandsetupthewindow.
JFrameframe=newJFrame("MyCustomTable2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Createandsetupthecontentpane.
CombinenewContentPane=newCombine();
newContentPane.setOpaque(true);//contentpanesmustbeopaque
frame.setContentPane(newContentPane);
//Displaythewindow.
frame.pack();
frame.setVisible(true);
try
{
Thread.sleep(1000);
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
((MyTableModel)newContentPane.table.getModel()).combineRow("FirstName","LastName");
}
publicstaticvoidmain(String[]args){
//Scheduleajobfortheevent-dispatchingthread:
//creatingandshowingthisapplication´sGUI.
javax.swing.SwingUtilities.invokeLater(newRunnable(){
publicvoidrun(){
createAndShowGUI();
}
});
}
classMyTableModelextendsAbstractTableModel{
privateString[]columnNames={"FirstName",
"LastName",
"Sport",
"#ofYears",
"Vegetarian"};
privateListcList=newArrayList();
{
for(inti=0;icList.add(columnNames[i]);
}
privateObject[][]data={
{"Mary","Campione",
"Snowboarding",newInteger(5),newBoolean(false)},
{"Alison","Huml",
"Rowing",newInteger(3),newBoolean(true)},
{"Kathy","Walrath",
"Knitting",newInteger
(2),newBoolean(false)},
{"Sharon","Zakhour",
"Speedreading",newInteger(20),newBoolean(true)},
{"Philip","Milne",
"Pool",newInteger(10),newBoolean(false)}
};
privateListdList=newArrayList();
{
for(inti=0;iListtmp=newArrayList();
for(intj=0;jtmp.add(data[i][j]);
}
dList.add(tmp);
}
}
publicintgetColumnCount(){
returncList.size();
}
publicintgetRowCount(){
returndList.size();
}
publicStringgetColumnName(intcol){
return(String)cList.get(col);
}
publicObjectgetValueAt(introw,intcol){
return((List)dList.get(row)).get(col);
}
publicvoidcombineRow(Stringr1,Stringr2){
intindex1=cList.indexOf(r1);
intindex2=cList.indexOf(r2);
cList.set(index1,r1+r2);
cList.remove(r2);
for(inti=0;iListlist=(List)dList.get(i);
list.set(index1,list.get(index1).toString()+list.get(index2));
list.remove(index2);
}
fireTableStructureChanged();
}
/*
*JTableusesthismethodtodeterminethedefaultrenderer/
*editorforeachcell.Ifwedidn´timplementthismethod,
*thenthelastcolumnwouldcontaintext("true"/"false"),
*ratherthanacheckbox.
*/
publicClassgetColumnClass(intc){
returncList.get(c).getClass();
}
publicbooleanisCellEditable(introw,intcol){
//Notethatthedata/celladdressisconstant,
//nomatterwherethecellappearsonscreen.
returntrue;
}
publicvoidsetValueAt(Objectvalue,introw,intcol){
((List)dList.get(row)).set(col,value);
fireTableCellUpdated(row,col);
}
privatevoidprintDebugData(){
intnumRows=getRowCount();
intnumCols=getColumnCount();
for(inti=0;iSystem.out.print("row"+i+":
");
for(intj=0;jSystem.out.print(""+((List)dList.get(i)).get(j));
}
System.out.println();
}
System.out.println("--------------------------");
}
}
}
请仔细看MyTableModel的实现
第二个:
/*(swing1.1beta3)*/
packagetame.examples;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.*;
importjavax.swing.*;
importjavax.swing.table.*;
importtame.table.ColumnGroup;
importtame.table.GroupableTableHeader;
importtame.table.GroupableTableHeaderUI;
/**
*|-----------------------------------------------------|
*| | Name | Language |
*| |-----------------|--------------------------|
*| SNo. | | | | Others |
*| | 1 | 2 |Native|-----------------|
*| | | | | 2 | 3 |
*|-----------------------------------------------------|
*| | | | | | |
@authorNobuoTamemasa
@version1.011/09/98
*/
publicclassGroupableHeaderExampleextendsJFrame{
GroupableHeaderExample(){
super("GroupableHeaderExample");
DefaultTableModeldm=newDefaultTableModel();
dm.setDataVector(newObject[][]{
{"119","foo","bar","ja","ko","zh"},
{"911","bar","foo","en","fr","pt"}},
newObject[]{"SNo.","1","2","Native","2","3"});
JTabletable=newJTable(dm){
protectedJTableHeadercreateDefaultTableHeader(){
returnnewGroupableTableHeader(columnModel);
}
};
TableColumnModelcm=table.getColumnModel(); //得到列模型,可以取出表头
ColumnGroupg_name=newColumnGroup("Name");
g_name.add(cm.getColumn
(1));
g_name.add(cm.getColumn
(2));
ColumnGroupg_lang=newColumnGroup("Language");
g_lang.add(cm.getColumn(3));
ColumnGroupg_other=newColumnGroup("Others");
g_other.add(cm.getColumn(4));
g_other.add(cm.getColumn(5));
g_lang.add(g_other);
GroupableTableHeaderheader=(GroupableTableHeader)table.getTableHeader();
header.addColumnGroup(g_name);
header.addColumnGroup(g_lang);
TableCellRendererrenderer= newDefaultTableCellRenderer(){
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
JTableHeaderheader=table.getTableHeader();
if(header!
=null){
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
setHorizontalAlignment(JLabel.CENTER);
setText((value==null)?
"":
value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
returnthis;
}
};
TableColumnModelmodel=table.getColumnModel();
for(inti=0;i model.getColumn(i).setHeaderRenderer(renderer);
}
table.getTableHeader().setUI(newGroupableTableHeaderUI());
JScrollPanescroll=newJScrollPane(table);
getContentPane().add(scroll);
setSize(400,120);
}
publicstaticvoidmain(String[]args){
GroupableHeaderExampleframe=newGroupableHeaderExample();
frame.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
frame.setVisible(true);
}
}
____________________________________________________________________________
publicclassGroupableHeaderExampleextendsJFrame{
GroupableHeaderExample(){
super("GroupableHeaderExample");
DefaultTableModeldm=newDefaultTableModel();
dm.setDataVector(newObject[][]{
{"119","foo","bar","ja","ko","zh"},
{"911","bar","foo","en","fr","pt"}},
newObject[]{"SNo.","1","2","Native","2","3"});
JTabletable=newJTable(dm){
protectedJTableHeadercreateDefaultTableHeader(){
returnnewGroupableTableHeader(columnModel);
}
};
TableColumnModelcm=table.getColumnModel();
ColumnGroupg_name=newColumnGroup("Name");
g_name.add(cm.getColumn
(1));
g_name.add(cm.getColumn
(2));
ColumnGroupg_lang=newColumnGroup("Language");
g_lang.add(cm.getColumn(3));
ColumnGroupg_other=newColumnGroup("Others");
g_other.add(cm.getColumn(4));
g_other.add(cm.getColumn(5));
g_lang.add(g_other);
GroupableTableHeaderheader=(GroupableTableHeader)table.getTableHeader();
header.addColumnGroup(g_name);
header.addColumnGroup(g_lang);
TableCellRendererrenderer= newDefaultTableCellRenderer(){
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
JTableù[”^„v_RNý€Yù[PŸ
ÿÙ?
/f
`HN_NÞV‹N_ÿ
_ŸSàV:
N(WHQMR„vh_e_a_d_e_r_-Nò]Ï~_€Q†Ç?
m_a_r_g_i_n_„v˜†N
ÿ
€
Tb—Í‘Y/} R†Ndkm_a_r_g_i_n__0`OïSåNôf9eG_r_o_u_p_a_b_l_e_T_a_b_l_e_H_e_a_d_e_r_U_I_„vp_a_i_n_t_¹eÕl
ÿRd–());
}
setHorizontalAlignment(JLabel.CENTER);
setText((value==null)?
"":
value.toString()