JTablecolumnheadercustomrendererexamples
[Link]
LastUpdatedon17April2014|
Print
MEmail
[Link]
customized:
AJTablewithallcolumnheaderscustomizedwithasamerenderer
AJTablewithmultirenderersfordifferentcolumnheaders
BasicallywecreateacustomrendererbywritingaclassthatimplementstheTableCellRenderinterfaceandextendsaSwingcomponent([Link])
likethis:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassSimpleHeaderRendererextendsJLabelimplementsTableCellRenderer{
publicSimpleHeaderRenderer(){
//codetoinitilizetheGUI...
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
//codetocustomizetheGUIbasedontheparameters
returnthis;
}
Thenwesetthisrendererforallcolumnheadersinthetablelikethis:
1
[Link]().setDefaultRenderer(newSimpleHeaderRenderer());
Orsetthisrendererforaspecificcolumn,e.g.the3rdcolumninthisexample:
1
[Link]().getColumn(2).setHeaderRenderer(newSimpleHeaderRenderer());
Nowletsseehowtocreatetableswithcustomrenderersthatlookliketheabovescreenshots.
LearnSwinginSwing:ABeginner'sGuide
[Link]
ThisexampleshowshowtocreateacustomrendererandapplyitforallcolumnheadersofaJTable.
Codeoftherendererclass,[Link]:
1
[Link];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*AsimplerendererclassforJTablecomponent.
*@[Link]
*
*/
publicclassSimpleHeaderRendererextendsJLabelimplementsTableCellRenderer{
publicSimpleHeaderRenderer(){
setFont(newFont("Consolas",[Link],14));
setForeground([Link]);
setBorder([Link]());
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
setText([Link]());
returnthis;
}
Codeofademoprogram,[Link]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*ASwingprogramdemonstrateshowtouseacustomrendererfor
*allcolumnheadersofaJTablecomponent.
*@[Link]
*
*/
publicclassJTableHeaderRendererSimpleextendsJFrame{
privateJTabletable;
publicJTableHeaderRendererSimple(){
super("JTableColumnHeaderCustomRendererBasic");
//constructsthetable
String[]columnNames=newString[]{"Title","Author","Publisher","PublishedDate","Pages","Rating"};
String[][]rowData=newString[][]{
{"EffectiveJava","JoshuaBloch","AddisionWesley","May08th2008","346","5"},
{"ThinkinginJava","BruceEckel","PrenticeHall","Feb26th2006","1150","4"},
{"HeadFirstJava","KathySierra&BertBates","O'ReillyMedia","Feb09th2005","688","4.5"},
};
table=newJTable(rowData,columnNames);
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[Link]().setDefaultRenderer(newSimpleHeaderRenderer());
add(newJScrollPane(table));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(640,150);
setLocationRelativeTo(null);
}
publicstaticvoidmain(String[]args){
[Link](newRunnable(){
@Override
publicvoidrun(){
newJTableHeaderRendererSimple().setVisible(true);
}
});
}
Outputwhenrunningthedemoprogram:
[Link]
Thisexampleshowshowtocreateandapplydifferentrenderersfordifferentcolumnheaders,forthesetableheaders:
WearegoingtocreateadefaultrenderforallheadersandthreedifferentrenderersforthethreecolumnsWon,Drawn,andLost.
Codeofthedefaultrendererclass,[Link]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*AsimplerendererclassforJTablecomponent.
*@[Link]
*
*/
publicclassDefaultHeaderRendererextendsJLabelimplementsTableCellRenderer{
publicDefaultHeaderRenderer(){
setFont(newFont("Consolas",[Link],14));
setOpaque(true);
setForeground([Link]);
setBackground([Link]);
setBorder([Link]());
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
setText([Link]());
returnthis;
}
CodeoftherendererclassfortheWoncolumnheader,[Link]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*AsimplerendererclassforJTablecomponent.
*@[Link]
*
*/
publicclassWonHeaderRendererextendsJLabelimplementsTableCellRenderer{
publicWonHeaderRenderer(){
setFont(newFont("Consolas",[Link],14));
setOpaque(true);
setForeground([Link]);
setBackground([Link]);
setBorder([Link]());
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
setText([Link]());
returnthis;
}
CodeoftherendererclassfortheDrawncolumnheader,[Link]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*AsimplerendererclassforJTablecomponent.
*@[Link]
*
*/
publicclassDrawnHeaderRendererextendsJLabelimplementsTableCellRenderer{
publicDrawnHeaderRenderer(){
setFont(newFont("Consolas",[Link],14));
setOpaque(true);
setForeground([Link]);
setBackground([Link]);
setBorder([Link]());
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
setText([Link]());
returnthis;
}
RelatedCourse:JavaSwing(GUI)Programming:FromBeginnertoExpert
CodeoftherendererclassfortheLostcolumnheader,[Link]:
1
2
3
4
[Link];
[Link];
[Link];
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*AsimplerendererclassforJTablecomponent.
*@[Link]
*
*/
publicclassLostHeaderRendererextendsJLabelimplementsTableCellRenderer{
publicLostHeaderRenderer(){
setFont(newFont("Consolas",[Link],14));
setOpaque(true);
setForeground([Link]);
setBackground([Link]);
setBorder([Link]());
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
setText([Link]());
returnthis;
}
Codeofademoprogram,[Link]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*ASwingprogramdemonstrateshowtousemulticustomrenderersfor
*columnheadersofaJTablecomponent.
*@[Link]
*
*/
publicclassJTableHeaderMultiRenderersextendsJFrame{
privateJTabletable;
publicJTableHeaderMultiRenderers(){
super("JTableColumnHeaderMultiCustomRenderers");
//constructsthetable
String[]columnNames=newString[]{"Position","Team","Won","Drawn","Lost","Points"};
String[][]rowData=newString[][]{
{"1","ManchesterUnited","28","5","5","89"},
{"2","ManchesterCity","23","9","6","78"},
{"3","Chelsea","22","9","7","75"},
{"4","Arsenal","21","10","7","73"},
};
table=newJTable(rowData,columnNames);
[Link]().setDefaultRenderer(newDefaultHeaderRenderer());
[Link]().getColumn(2).setHeaderRenderer(newWonHeaderRenderer());
[Link]().getColumn(3).setHeaderRenderer(newDrawnHeaderRenderer());
[Link]().getColumn(4).setHeaderRenderer(newLostHeaderRenderer());
add(newJScrollPane(table));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(640,150);
setLocationRelativeTo(null);
}
publicstaticvoidmain(String[]args){
[Link](newRunnable(){
@Override
publicvoidrun(){
newJTableHeaderMultiRenderers().setVisible(true);
}
});
}
53
Outputwhenrunningthedemoprogram:
[Link]
Oneproblemwiththecustomrendererforcolumnheaderisthatthesorticons([Link])arelost,eventhesortingfunctionality
[Link],createarendererclassasfollows:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
[Link];
/**
*AsimplerendererclassforJTablecomponent,butkeepthesorticons.
*@[Link]
*
*/
publicclassKeepSortIconHeaderRendererimplementsTableCellRenderer{
privateTableCellRendererdefaultRenderer;
publicKeepSortIconHeaderRenderer(TableCellRendererdefaultRenderer){
[Link]=defaultRenderer;
}
@Override
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,
booleanisSelected,booleanhasFocus,introw,intcolumn){
Componentcomp=[Link](table,value,isSelected,hasFocus,row,column);
if(compinstanceofJLabel){
JLabellabel=(JLabel)comp;
[Link](newFont("Consolas",[Link],14));
[Link]([Link]);
[Link]([Link]());
}
returncomp;
}
Thetrickhereistoupdatethedefaultrenderer(whichisusuallyaJLabelinstance)[Link]
thisrendererisasfollows:
Forallcolumnheaders:
1
2
Output:
JTableHeaderheader=[Link]();
[Link](newKeepSortIconHeaderRenderer([Link]()));
Foraspecificcolumnheader:
1
2
TableColumncolumn=[Link]().getColumn(2);
[Link](newKeepSortIconHeaderRenderer([Link]().getDefaultRenderer()));
Output:
YoucandownloaddemoprogramsintheAttachmentssection.
LearnAdvancedSwingtechniquesinCoreJava,VolumeIIAdvancedFeatures(9thEdition)
DoyouwanttobeexpertinJavaprogramming?Ifyoudo,whynotjoinourmailinglisttogetadvicesfromtheprofessionalseveryday?Justclickhere:
[Link]
Attachments:
[Link]
[Customrenderer]
0.8kB
[Link]
[Customrenderer]
0.8kB
[Link]
[Customrenderer(keepsorticons)]
1kB
[Link]
[Demoprogram(multirenderers)]
1kB
[Link] [Demoprogram(multirenderers+keepsorticons)]
1kB
[Link]
[Demoprogram(singlerenderer+keepsorticons)]
1kB
[Link]
[Demoprogram(singlerenderer)]
1kB
[Link]
[Customrenderer(keepsorticons)]
[Link]
[Customrenderer]
0.8kB
[Link]
[Customrenderer]
0.7kB
[Link]
[Customrenderer]
0.8kB
1kB