0% found this document useful (0 votes)
81 views7 pages

Custom Renderers for JTable Headers

This document provides examples of customizing column headers in a JTable component in Java Swing. It describes creating custom renderer classes that implement the TableCellRenderer interface and applying them to column headers. Specifically, it shows: 1) Creating a simple custom renderer class and applying it to all column headers. 2) Creating different custom renderer classes for specific columns to style them differently and applying the appropriate renderer to each column header. 3) The custom renderer classes override getTableCellRendererComponent() to customize the header cell's appearance and return the renderer component.

Uploaded by

RennyDorta
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
81 views7 pages

Custom Renderers for JTable Headers

This document provides examples of customizing column headers in a JTable component in Java Swing. It describes creating custom renderer classes that implement the TableCellRenderer interface and applying them to column headers. Specifically, it shows: 1) Creating a simple custom renderer class and applying it to all column headers. 2) Creating different custom renderer classes for specific columns to style them differently and applying the appropriate renderer to each column header. 3) The custom renderer classes override getTableCellRendererComponent() to customize the header cell's appearance and return the renderer component.

Uploaded by

RennyDorta
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

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

You might also like