| Changing the Background Color for One Cell in a JTable |
|
 |
Index ‹ java-programmer
|
- Previous
- 1
- polymorphic voodoo?Ok, here is what I am trying to decipher. I have the following code
private void someMethod() {
ArrayList list1 = null;
LinkedList list2 = null;
cleverFunction(list1,list2);
}
private void cleverFunction(List first, List second) {
System.out.println("Static type for first is " + .....);
System.out.println("Static type for second is " + .....);
}
Ok, so, given a polymorphic call like this, is it possible, through
whatever witchcraft necessary, to determine what the static types of
the type polymorphic parameters are?
Maybe some sort of interrogation of the stack? Maybe some sorta
reflection?
Ideas?
christian
http://christian.bongiorno.org/resume.PDF
- 1
- Java in AT&T PWPHi,
I was referred to you because I'm having a problem getting this to run in
AT&T PWP (Personal Web Pages). I compile the Java Program using NetBeans
IDE 3.6. I upload the .java, the .class and the .html files to my PWP
library.
import java.awt.*;
import java.applet.*;
import javax.swing.*;
public class AppHelloWorld extends JApplet
{
public void init()
{
resize(700,100);
}
public void paint(Graphics g)
{
g.drawString("Hello, Applet world!", 10, 25);
}
}
---------------------------------------------------------------
This is the page I run in the browser (Internet Explorer and Netscape).
<HTML>
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>
<P>
<APPLET code="AppHelloWorld.class" width=350 height=200>
</APPLET>
</P>
<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>
This is the message I get from the browser:
java.lang.ClassFormatError: AppHelloWorld (Extra bytes at the end of the
class file)
The page will run in Edit*Plus and IE (FILE, OPEN, BROWSE) and Netscape
(FILE, OPEN FILES, select document).
Can you provide any information on how to get this to run in the browsers?
Wayne Rawls
- 1
- Servlet HelpDear Friends
pls help in running servlet in Tomcat. i m not getting which setting
should i do for it.
pls send me how to execute a servlet HalloWorld
paresh
- 1
- Shuffled Poker DeckHi all,
Im new to Java, and as Training for me I tried to build an Application,
which returns a shuffled Pokerdeck. (Random from 1 to 52)
Maybe you will laugh, but i needed a whole day to solve it, and I think its
even not good solution.
Well, at least it works, but please could you give me a hint, how to solve
this problem easier.
Heres the code:
/**
* @(#)Poker.java
*
*
* @author Martin Krainer
* @version 1.00 2007/1/22
*/
public class Poker {
static int[] deck = new int[52];
void buildDeck() { // builds a deck with 52
(hopefully) different Integers
for (int i=0; i<52; i++) {
deck[i] = (int)(Math.random()*10E7);
}
}
void shuffledDeck(int[] a) { // now here I tried hard and
long to get a field with numbers from 1 to 52
long[] zahl= new long[52];
for (int i=0; i<10E7; i++) {
for (int j=0; j<52; j++) {
if (i == deck[j]) {
zahl[j] = j;
System.out.print( " " + (zahl[j]+1) );
}
}
}
}
public static void main(String[] args) {
Poker p = new Poker();
p.buildDeck();
p.shuffledDeck(deck); //well, it works, but...
what do you think?
}
}
- 3
- [OT] Teaching OO / Java (was: Concentric Circles Loosing It)Hi !
"Anthony Borla" wrote:
>
> "Alan P" <email***@***.com> wrote in message
> news:br0efp$ola$email***@***.com...
> >
> > I'm a newbie Java student as well, and AFAIK we all start
> > the same way -> by using a 'Turtle' class. Remember those
> > little robot things from infant school, with the penUp(),
> > penDown() etc.
> >
> > The idea is not stunning effects, but an introduction to OOPS
[...]
> I'm just a very firm believer [based mainly anectdotal, not statistical,
> evidence] in teaching programming concepts from first principles which, to
> me, means:
>
> * Teaching the rudiments of console windows / command-line
> usage, which includes the use of editors, compilers, and similar
> tools.
O.k., this is meant to teach the "DE" (leaving out the leading 'I'). But
maybe some people want their students to concentrate on the course theme, so
they decide to use an IDE. Personally, I think one has to know how to deal
with a language without any external (!) IDE, so you should know about
"javac" and "java"...
>
> Taking a Windows environment as an example, all that is needed
> is knowing how to:
>
> - Open up a Command Window
> - Load and use Notepad [or one of its more versatile
> replacements]
> - Invoke javac.exe and java.exe
>
> * Teaching language syntax basics using a serial execution
> programming model, a fancy description for a program
> which executes by starting at point A and proceeding
> downwards towards towards point B e.g.
>
> ...
> public static void main(String[] args)
> {
> // Point A
> ...
> ...
> // Point B
> }
> ...
>
> Once students have grasped the basics of structured / object-based
> programming, all in a serial, non-GUI enviroment, the rudiments of OOP
> [inheritance, polymophism] can be taught.
This will teach students to write programs the serial way first. In my
opinion, it would be the better approach to teach basic OO concepts first
(before even invoking an editor for the first time, maybe using some
pseudo-language).
Using your approach, students would learn how to write an imperative program
frist (one big main() method). Then you would introduce a completely new
paradigm, the structured programming, using functions (other than the main()
method, but still implementing a single class). Later on, you would
introduce yet another paradigm, the object-oriented programming implementing
specialized classes which will focus on certain tasks.
Have you ever tried to teach oo concepts to a - let's say - COBOL programmer
(nothing to say against COBOL programmer, of course, replace with almost any
3GL you (don't) like)? You will have a very hard time unless he (or she)
will understand them, because the imperative paradigm will block their view
onto objects. So I would always prefer to teach the object-oriented way
first. For most people, it will be quite easy to write "one big main()
method" if they are forced to do it, and the oo paradigm will not stand in
their way.
> Once these basics have been
> mastered, the next steps could be taken, which would probably be one, or
> more, of the following:
>
> * Algorithms / Data Structures
Data Structures might well be renamed "Object Oriented Design"... ;-)
> * Concurrent / Advanced Programming
> * Event-driven / GUI Programming
>
> I guess you would describe me as decidedly 'old school' in this regard :)
!
>
> In a nutshell, I'm not comfortable with the notion that GUI's and graphics
> simplify the teaching of very important, fundamental programming ideas,
but
> I probably hold a minority opinion here.
>
> Programming, like mathematics, can be an exciting field. However, much
> effort, most of it in mundane areas, must be expended to satisfactorily
> grasp the basics on which all further learning progress rests. I can
> appreciate course designers wanting to make programming more interesting
or
> accessable, hence the use of GUI's and similar tools, or presenting ideas
in
> graphical form. IMO, though, it is best to avoid such things as they sport
> hidden complexities, and keep things as simple as possible, at least until
a
> firm grounding in the basics has been obtained.
Yes. But one might define "basics" somewhat different. You must not have (I
might even say "should not have") any knowledge about "serial" or
"functional" programming to learn to write good OO programs.
(O.k., I might have started another thread on this, but then...)
Cheers,
Michael
- 3
- Grid Bag question.I am trying to put together a panel which needs to consist of 20 lines,
each containing :
JLabel - 2 columns
JTextField - 1 colomn
JTextField - 1 column
JLabel - 2 Columns
The JText fields would be filled out from arrays, so it would be layed
out with the help of a 'for' loop.
I put together a test program (provided below) to try to emulate this,
but the layout manager only seems to want to give each entity (JLabel,
JTextField) the same amount of width each regardless of what I specify
in the GridWidth fields. Can this be done with specifying sizes for the
individual JTextfields or labels? Please advise - Thanks - Lou
import java.awt.*;
import javax.swing.*;
public class Test_GridBag2 {
public static void addComponentsToPane(JPanel pane) {
JButton button;
JLabel label;
JTextField jtf;
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
//pane.setPreferredSize(new Dimension(300,200));
for (int i = 0; i<3;i++)
{
label = new JLabel("test");
c.gridx = 0;
c.gridwidth = 2; //2 columns wide
c.gridy = i; //third row
c.weightx = 1.0;
//c.anchor = GridBagConstraints.EAST; //bottom of space
pane.add(label, c);
jtf = new JTextField();
c.gridx = 2; //aligned with button 2
c.gridwidth = 1; //2 columns wide
c.gridy = i;
c.weightx = 1.0; //request any extra vertical space
//c.anchor = GridBagConstraints.EAST;//third row
pane.add(jtf, c);
jtf = new JTextField();
c.gridx = 3; //aligned with button 2
c.gridwidth = 1; //2 columns wide
c.gridy = i;
c.weightx = 1.0; //request any extra vertical space
//c.anchor = GridBagConstraints.EAST;//third row
pane.add(jtf, c);
label = new JLabel("");
c.gridx = 4; //aligned with button 2
c.gridwidth = 2; //2 columns wide
c.gridy = i;
//c.insets = new Insets(0,0,0,10);
c.weightx = 1.0; //request any extra vertical space
//c.anchor = GridBagConstraints.EAST;//third row
pane.add(label, c);
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("GridBagLayoutDemo");
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
addComponentsToPane(panel);
frame.getContentPane().add( panel );
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
- 4
- basics of ANThi, i have downloaded and started reading the ant tutorial.
i am confused becuase some of the concepts , the tutorial (jakarta )
is not making clear.
my objective is to compile and run a java program.
my questions are as follows
it is called in order to compile and run you need a "build.xml" file .
where is that file ?
QUESTION 1: is it within ant distribution OR i have to make a
build.xml file myself?
The tutorial does not say anything about it. it just starts straight
forward with a demo "build.xml" file.
where do i put this "build.xml" file ?
QUESTION 2 :
i have a java code here.
>md src
package oata;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
location of this code is "src/oata/HelloWorld.java"
Now tell, where do i put "build.xml" file ?
- 4
- Java RPCHi All,
We have a set of application that communicates with embeded devices
that runs linux. Now we decide to use xml-rpc to send commands to the
devices with Apache's xmlrpc (or any other). We only need to generate,
and parse the structured xml string that contains the method name and
parameters. In other words we dont want to use a rpc server.
My question is how can I obtain the xml string of RPC command by only
suplying the method name and a vector that contains the parameters.
ps. In addition to primitive data types, parameters may contain
struct, array and etc.
Thanks in advance for your answer..
- 11
- Pooling of connectionsHi all,
I've read a few articles about how pooled connections are more
efficient because you don't need to repeatedly setup/teardown a
connection - you just acquire connection from the pool.
Exactly what steps in setting up/tearing down a connection are skipped
by acquiring an already existing connection? Perhaps the steps in
establishing/tearing down a connection would help in answering this
question?
Thanks
Taras
- 11
- checking for org.omg.CORBA.OBJECT_NOT_EXISTHi,
I'm writing a java CORBA client, using the Visibroker ORB. Sometimes
when I call methods on the remote object references I get the following
exception
org.omg.CORBA.OBJECT_NOT_EXIST: vmcid: OMG minor code: 0 completed:
No
Is there some way that I can check beforehand whether this exception
will be thrown, i.e. whether the remote object still exists? I thought
that I could do it like this:
if (myRef._non_existent()) {
// get a new myRef
}
myRef.doRemoteMethod();
But I've found that _non_existent() throws exceptions. Is there a
better way to check for the state that causes an OBJECT_NOT_EXIST
exception?
Regards,
Dan
- 12
- HAVI packages, where?Hi everyone, I want to download HAVI API packages for java but i don't
know where can i download its. Thank you
- 12
- Good programming questionI was just wondering as to what is a better standard to program by. If
I have a class like this:
class MyClass {
private int myVariable;
private void myMethod1(){
myVariable = 1;
}
private void myMethod2(){
this.myVariable = 1;
}
}
Which method is better? Is there a better choice? Does it make any
difference which way I do it? Maybe this sounds like an insignificant
question but I have done this both ways and just don't know if there is
a good reason to go one way or the other.
- 12
- Java regex imposture re: Perl regex compatibility// java has claimed to have added Perl style regular expressions ,
however
// writing a regular expression containing a variable is ugly in java.
// in Perl: $rec =~ s/$delimiter//g is easy to write and to read.
// in java: if delimiter may hold say "||" or "!" isntead of [a-z]
text,
// you have to quote it as below with preceding \\Q (not just \Q ) and
// trailing \\E. ugly and difficult to code!
rec = rec.replaceAll("\\Q" + delimiter + "\\E" ,"");
So even though java has perl style regex in principle, in practice,
in java they seem nearly unusable!
-A.C. Attlee
- 16
- Text/Console mode UIHi All,
is there anything like swing but working in text mode? I need a simple
user interface working in the console mode for my little app.
thanks
schw
- 16
- How to open dialup connection in Java?Hi everyone,
Who know, how to open dialup connection from Java? (I found only one
way - to run another program (*.bat file), but it's not good idea). Any
another suggestions?
Haim.
|
| Author |
Message |
Hal Vaughan

|
Posted: 2008-1-20 7:07:00 |
Top |
java-programmer, Changing the Background Color for One Cell in a JTable
I've been working on this for a few hours. I've read tutorials and seen
different examples, but this is still driving me nuts.
I have a table and want to be able to change the color of one cell in it.
It seems to do this, I can't get a cell renderer and just change the color,
I have to create my own class to do that. I've tried that and a number of
other things and can't get it to work.
I finally took the SimpleTableDemo from Sun and checked to make sure it was
running. Once it was, I added four lines:
boolean isSelected = table.isCellSelected(1, 1);
DefaultTableCellRenderer defRender = (DefaultTableCellRenderer)
table.getCellRenderer(1, 1);
Component cellRenderer = defRender.getTableCellRendererComponent(table,
"Huml", isSelected, false, 1, 1);
cellRenderer.setBackground(Color.blue);
(The whole example is at the bottom of this post.)
When I use this example, it turns ALL the cells in the table blue, not just
the one at 1,1.
I've got several questions about this:
1) Do I have to create my own cell renderer to change a cell background
color, or can't I just do it like above? Even when I used my own renderer,
I still got the actual Component named cellRenderer using the same
parameters, so what difference would doing it in a separate class make?
2) The renderer needs the value that is in the cell currently. In my own
program, I got that from the DefaultTableModel I was using. Here I just
used the text that was put in that cell. Is there any way to get the cell
value directly from the table? In this example, I tried getting a
DefaultTableModel (by casting) from the table, but it didn't work, so I
couldn't get the data by reading the cell.
3) Why does this code (above) set the entire table and not just the cell at
1,1?
If anyone has a simpler example of how to set the background color in just a
few lines, I'd be glad to see it. I can't believe how much I need to do
just to change the background color in one table cell!
Thanks for any help/insight!
Hal
----------------example code----------------
/*
* SimpleTableDemo.java requires no other files.
*/
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import com.hal.gui.HalCellRenderer;
public class SimpleTableDemo extends JPanel {
private boolean DEBUG = false;
public SimpleTableDemo() {
super(new GridLayout(1,0));
String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Knitting", new Integer(2), new Boolean(false)},
{"Sharon", "Zakhour",
"Speed reading", new Integer(20), new Boolean(true)},
{"Philip", "Milne",
"Pool", new Integer(10), new Boolean(false)}
};
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
// table.setFillsViewportHeight(true);
if (DEBUG) {
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
printDebugData(table);
}
});
}
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this panel.
add(scrollPane);
//======================================================
//Only part I have added is the next four lines
//======================================================
boolean isSelected = table.isCellSelected(1, 1);
DefaultTableCellRenderer defRender = (DefaultTableCellRenderer)
table.getCellRenderer(1, 1);
Component cellRenderer =
defRender.getTableCellRendererComponent(table, "Huml", isSelected, false,
1, 1);
cellRenderer.setBackground(Color.blue);
}
private void printDebugData(JTable table) {
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
javax.swing.table.TableModel model = table.getModel();
System.out.println("Value of data: ");
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + model.getValueAt(i, j));
}
System.out.println();
}
System.out.println("--------------------------");
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("SimpleTableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
SimpleTableDemo newContentPane = new SimpleTableDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
|
| |
|
| |
 |
Hal Vaughan

|
Posted: 2008-1-20 12:38:00 |
Top |
java-programmer >> Changing the Background Color for One Cell in a JTable
Hal Vaughan wrote:
> I've been working on this for a few hours. I've read tutorials and seen
> different examples, but this is still driving me nuts.
>
> I have a table and want to be able to change the color of one cell in it.
> It seems to do this, I can't get a cell renderer and just change the
> color,
> I have to create my own class to do that. I've tried that and a number of
> other things and can't get it to work.
>
> I finally took the SimpleTableDemo from Sun and checked to make sure it
> was
> running. Once it was, I added four lines:
>
> boolean isSelected = table.isCellSelected(1, 1);
> DefaultTableCellRenderer defRender = (DefaultTableCellRenderer)
> table.getCellRenderer(1, 1);
> Component cellRenderer =
> defRender.getTableCellRendererComponent(table,
> "Huml", isSelected, false, 1, 1);
> cellRenderer.setBackground(Color.blue);
>
> (The whole example is at the bottom of this post.)
>
> When I use this example, it turns ALL the cells in the table blue, not
> just the one at 1,1.
>
> I've got several questions about this:
> 1) Do I have to create my own cell renderer to change a cell background
> color, or can't I just do it like above? Even when I used my own renderer,
> I still got the actual Component named cellRenderer using the same
> parameters, so what difference would doing it in a separate class make?
> 2) The renderer needs the value that is in the cell currently. In my own
> program, I got that from the DefaultTableModel I was using. Here I just
> used the text that was put in that cell. Is there any way to get the cell
> value directly from the table? In this example, I tried getting a
> DefaultTableModel (by casting) from the table, but it didn't work, so I
> couldn't get the data by reading the cell.
> 3) Why does this code (above) set the entire table and not just the cell
> at 1,1?
Answering my own questions:
Yes, it's necessary to create a special table cell rendering class to do
this. To change the color of any cells, you've got to create your own
renderer, then use JTable.setDefaultRenderer(Class columnClass,
TableCellRenderer renderer). What confuses me is that this takes two
arguments, the first works for me if I just use Object.class. If someone
can clue me in with what the heck goes on with that, I'd appreciate it.
The 2nd must be your special renderer. Then WITHIN your render, you have
the method getTableCellRendererComponent() with 5 arguments I won't list.
You'll never call this, but JTable does when rendering. Within your class,
in that method, put the code that will determine the conditions under which
a cell should be rendered a certain way.
In my case, I wanted cells to be rendered in certain colors if their row
number was one of the members of a LinkedList. I had to include routines
in my renderer to add row numbers to that list and I also had to check, in
getTableCellRendererComponent() to see if a row number was a member of that
list. If it was, then I specified my special background color.
It's not necessary to supply the renderer with any info about the cell
that's being rendered because the JTable will do that.
The hard part for me to understand was that I was trying to set just one or
a few cells to a different background color and, like I've found so often
in Java, you can't get there from here. To change one cell's color, you
have to write a renderer and add it to the table as a renderer and have the
code in that renderer, more specifically in the method
getTableCellRendererComponent() in that renderer, check for the cell you
want and use the special color. It's just a personal gripe, but it's
another case where, in order to do one thing in Java, I have to do an
additional 5 other things to get to the point where I can do it.
I've answered this to help others searching for this kind of info in the
future. If anyone has corrections, I hope they add them, since, as I often
point out, I'm self taught, and I often miss things that many people just
take for granted in Java.
Hal
|
| |
|
| |
 |
Roedy Green

|
Posted: 2008-1-20 13:57:00 |
Top |
java-programmer >> Changing the Background Color for One Cell in a JTable
I would write a OneCellRenderer that looked something like this:
package com.mindprod.vercheck;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
/**
* render JTable String column, in a selected font, colours and
alignment. Engage with: columnModel.getColumn( col
* ).setCellRenderer( new RainbowRenderer( font, foreground,
background, JLabel.CENTER ) )
*/
final class RainbowRenderer extends DefaultTableCellRenderer
implements TableCellRenderer
{
private final Color foreground;
private final Font font;
private final int horizontalAlignment;
// -------------------------- PUBLIC INSTANCE METHODS
--------------------------
/**
* constructor
*
* @param font for to render the column
* @param foreground foreground colour
* @param horizontalAlignment e.g. JLabel.CENTER
*/
public RainbowRenderer( Font font,
Color foreground,
int horizontalAlignment )
{
this.foreground = foreground;
this.font = font;
this.horizontalAlignment = horizontalAlignment;
}
public Component getTableCellRendererComponent( JTable table,
Object value,
boolean
isSelected,
boolean hasFocus,
int row,
int column )
{
JLabel template = (JLabel)
super.getTableCellRendererComponent( table, value,
isSelected, hasFocus, row, column );
if ( ???? the special cell )
{
template.setFont( specialFont );
template.setForeground( specialForeground );
}
else
{
template.setFont( font );
template.setForeground( foreground );
}
// we don't handle setting selected background here.
// We don't get called when selection changes.
// leave it up to JTable to set the background to selected or
normal.
template.setHorizontalAlignment( horizontalAlignment );
if ( value != null )
{
template.setText( value.toString() );
}
else
{
template.setText( null );
}
return template;
}
--
Roedy Green, Canadian Mind Products
The Java Glossary, http://mindprod.com
|
| |
|
| |
 |
Filip Larsen

|
Posted: 2008-1-20 18:07:00 |
Top |
java-programmer >> Changing the Background Color for One Cell in a JTable
Hal Vaughan skrev:
> Answering my own questions:
>
> Yes, it's necessary to create a special table cell rendering class to do
> this. To change the color of any cells, you've got to create your own
> renderer, then use JTable.setDefaultRenderer(Class columnClass,
> TableCellRenderer renderer). What confuses me is that this takes two
> arguments, the first works for me if I just use Object.class. If someone
> can clue me in with what the heck goes on with that, I'd appreciate it.
You set default renderers with JTable.setDefaultRenderer and column
renderes with TableColumn.setCellRenderer, where the table column for
instance can be found using JTable.getColumnModel().getColumn(columnIndex).
If you want to understand how JTable decides which cell renderer to use,
look in JTable.getCellRendrer (snippet below from Java 1.4 source):
public TableCellRenderer getCellRenderer(int row, int column) {
TableColumn tableColumn = getColumnModel().getColumn(column);
TableCellRenderer renderer = tableColumn.getCellRenderer();
if (renderer == null) {
renderer = getDefaultRenderer(getColumnClass(column));
}
return renderer;
}
If your table model implement the TableModel.getColumnClass method to
return the special class you have for relevant column, you can register
your special renderer as a default renderer for that class. Note that if
you use DefaultTableModel it will just return Object.class for all
columns, which again means that only the default renderer registered for
Object.class will ever be used by the table. So, for default renderers
to be found the table model must return the right class.
Alternatively you can register your renderer with the table column. This
can for instance be useful if you have two columns with same class you
want to render with different renderers or if you dont want to "polute"
your table model with knowledge of column classes.
As to the definition of the renderer itself there are several ways to do
it depending on what you want. A fairly simple solution is to make a
wrapper renderer that delegates as much as possible, like
final TableCellRenderer r = table.getDefaultRenderer(String.class);
table.setDefaultRenderer(Special.class, new TableCellRenderer() {
public Component getTableCellRendererComponent(...) {
Color bg = figureOutBackgroundColor(value);
Component c = r.getTableCellRendererComponent(...);
c.setBackground(bg);
return c;
}
});
This assumes that your Special class uses toString() to construct the
textual value for the cell. If you want to use another method, say,
Special.getBalance() which for instance returns a Float, you can do
final TableCellRenderer r = table.getDefaultRenderer(Float.class);
table.setDefaultRenderer(Special.class, new TableCellRenderer() {
public Component getTableCellRendererComponent(...) {
Color bg = figureOutBackgroundColor(value);
value = ((Special)value).getBalance();
Component c = r.getTableCellRendererComponent(...);
c.setBackground(bg);
return c;
}
});
If you want to make sure your cell renderering appears as a standard
string renderer with just the changed background, you can extend from
DefaultTableCellRenderer instead of using delegation:
table.setDefaultRenderer(Special.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(...) {
Component c = super.getTableCellRendererComponent(...);
c.setBackground(figureOutBackgroundColor(value));
return c;
}
});
Regards,
--
Filip Larsen
|
| |
|
| |
 |
Hal Vaughan

|
Posted: 2008-1-21 1:10:00 |
Top |
java-programmer >> Changing the Background Color for One Cell in a JTable
Thanks for a lot of good info!
Hal
Filip Larsen wrote:
> Hal Vaughan skrev:
>
>> Answering my own questions:
>>
>> Yes, it's necessary to create a special table cell rendering class to do
>> this. To change the color of any cells, you've got to create your own
>> renderer, then use JTable.setDefaultRenderer(Class columnClass,
>> TableCellRenderer renderer). What confuses me is that this takes two
>> arguments, the first works for me if I just use Object.class. If someone
>> can clue me in with what the heck goes on with that, I'd appreciate it.
>
> You set default renderers with JTable.setDefaultRenderer and column
> renderes with TableColumn.setCellRenderer, where the table column for
> instance can be found using
> JTable.getColumnModel().getColumn(columnIndex).
>
> If you want to understand how JTable decides which cell renderer to use,
> look in JTable.getCellRendrer (snippet below from Java 1.4 source):
>
> public TableCellRenderer getCellRenderer(int row, int column) {
> TableColumn tableColumn = getColumnModel().getColumn(column);
> TableCellRenderer renderer = tableColumn.getCellRenderer();
> if (renderer == null) {
> renderer = getDefaultRenderer(getColumnClass(column));
> }
> return renderer;
> }
>
> If your table model implement the TableModel.getColumnClass method to
> return the special class you have for relevant column, you can register
> your special renderer as a default renderer for that class. Note that if
> you use DefaultTableModel it will just return Object.class for all
> columns, which again means that only the default renderer registered for
> Object.class will ever be used by the table. So, for default renderers
> to be found the table model must return the right class.
>
> Alternatively you can register your renderer with the table column. This
> can for instance be useful if you have two columns with same class you
> want to render with different renderers or if you dont want to "polute"
> your table model with knowledge of column classes.
>
> As to the definition of the renderer itself there are several ways to do
> it depending on what you want. A fairly simple solution is to make a
> wrapper renderer that delegates as much as possible, like
>
> final TableCellRenderer r = table.getDefaultRenderer(String.class);
> table.setDefaultRenderer(Special.class, new TableCellRenderer() {
> public Component getTableCellRendererComponent(...) {
> Color bg = figureOutBackgroundColor(value);
> Component c = r.getTableCellRendererComponent(...);
> c.setBackground(bg);
> return c;
> }
> });
>
> This assumes that your Special class uses toString() to construct the
> textual value for the cell. If you want to use another method, say,
> Special.getBalance() which for instance returns a Float, you can do
>
> final TableCellRenderer r = table.getDefaultRenderer(Float.class);
> table.setDefaultRenderer(Special.class, new TableCellRenderer() {
> public Component getTableCellRendererComponent(...) {
> Color bg = figureOutBackgroundColor(value);
> value = ((Special)value).getBalance();
> Component c = r.getTableCellRendererComponent(...);
> c.setBackground(bg);
> return c;
> }
> });
>
>
> If you want to make sure your cell renderering appears as a standard
> string renderer with just the changed background, you can extend from
> DefaultTableCellRenderer instead of using delegation:
>
> table.setDefaultRenderer(Special.class, new DefaultTableCellRenderer() {
> public Component getTableCellRendererComponent(...) {
> Component c = super.getTableCellRendererComponent(...);
> c.setBackground(figureOutBackgroundColor(value));
> return c;
> }
> });
>
>
>
> Regards,
|
| |
|
| |
 |
| |
 |
Index ‹ java-programmer |
- Next
- 1
- Maximum number of ThreadsI'm developing a simple Java client that runs over a CORBA server.
The main client thread is waiting for notification from this server.
On each notification,
The client creates a new thread executing some logic with the server and close.
Each session spend most of the time waiting for the server.
At most there can be ~1000 open session.
My questions are:
1. How many threads can be open at the same time
(with response time of up to ~1 second)?
2. Does the JVM open a native thread for each java thread?
I know both question is OS and JVM dependent,
so I'm not expecting exact numbers here. The client will probably run on Solaris or NT.
Thanks.
- 2
- JAVA GUI DESIGN SOFTWAREDear:Miss/Mr
May i know where can i get the java software that just similiar to VB
which can be drag and drop for the GUI design.
Thanks
- 3
- Raymond on Sun's strangleholdanoncoward wrote:
> JTK wrote:
>
>>> This made me think of an issue that has kicked around in my head for a
>>> whle. Just to be clear, IANAL. However, I seem to remember that one
>>> requirement of a patent be that the needed to be non-obvious to a
>>> skilled practitioner. Does someone know if this is correct?
>>
>>
>> Correct but irrelevant. Money talks, justice walks. If Sun wants to
>> shut down a Java implementation, all they need to do is litigate it to
>> death.
>
> How about Mono and .NET. Microsoft has patented the whole lot.
> Mono is *massively* infringing on copyrighted and patented Microsoft IP.
> What's your word on that?
Why would I have a "word on that", especially in a Java forum? You're
the one who love C# so much, you tell us why you prefer it to Java!
- 4
- XMLencoder customHey all,
I'm using XML encoder for long term storage. However, I'd like to be
able to customize what is saved at runtime. Why? There are several
data structures, which can balloon the size of the file to a few
megabytes. This data is not something every user might want to save
on load. I'd like to give them the option of whether or not to encode
these particular data structures. The rest of the code is perfectly
capable to dealing with these structures set to null. They often are
null.
I was thinking the easiest way for me to do this would be as follows:
I know this is not XMLEncoder code (but java serialization type
code...but that's what I need help with :) ) I have a feeling this is
going into the realm of persistance delegates, but I really have no
idea.
private Hashtable details= null;
private void writeObject(ObjectOutputStream s) throws IOException
{
if( dontSaveDetails)
{
Hashtable detailsBackup = details;
//clear the details, so they're not saved
setDetails(new Hashtable());
s.defaultWriteObject();
//restore details for the current session
details = bckdetails;
}
else
{
s.defaultWriteObject();
}
}
Any ideas on how to put this logic into the XMLencoder world?
Thanks,
Ymain
- 5
- 6
- Writing ASCII for r-232 output into induction machine??I have a machine that uses induction to bond metals together. The
machine has a remote heat station that you set the wattage, and the
time, etc (with up and down buttons) and it will run on its own.
However, every time I need to bond different metals, thicknesses,
widths, etc... I need to reset the info and go through the whole
process again. The machine, has an rs-232 port on the back of it,
which will accept codes written in ascii that will send that pertinent
information to it. I would like some help (Im an ascii newbie) with
writing these programs, so that I can store all the metals,
thicknesses, etc in a laptop connected to this remote heat station, and
then I can have anyone run it so long as they can read.
Any help would be greatly appreciated
Scott
PLEASE email me at email***@***.com
- 7
- Classes generated by eclipse vs javac have different serialVersionUIDHi,
I'm using eclipse 3.2 for development and have configured my project to
use JDK 1.5.0_07 with Compiler compliance level 1.3 (using default
compliance settings) and selected all "Classfile Generation" options
except "Inline finally blocks." The problem I'm having is that the
class files that are generated by eclipse are not the same as those
generated by javac (also using JDK 1.5.0_07), which is used in a make
script. javac is invoked like so:
javac -source 1.3 -g -d classes -nowarn -deprecation -classpath
<classpath> ...
The different class files cause a problem because I have serialized
some objects already with the javac classes so when I try to
deserialize them with the eclipse classes, I get the
InvalidClassException. When I run serialver on the offending class
file, I get two different values for the class file generated with
javac and the one generated using eclipse.
Has anyone ever had this or some similar problem? How do I correct this
(besides not using the eclipse class files)? I've spent many hours
scouring the web to find a solution, but have had no success. Any help
would be really appreciated!
Thanks,
Tai
- 8
- Long texts in JTable cellsMy application displays a table having several columns in a JTable.
(the GUI component is bound to a view iterator in Oracle ADF, if
anyone is familiar with that framework.) The problem:
One of the columns contains long text, including line breaks, which
is shown as a very long single line in the table cell. How can I
improve on this? (I guess I want something like an editable text-area,
except it should be part of the table).
Thanks for a hint, Sebastian
- 9
- Display XML Formatted in JTextPaneI'm displaying XML in a JTextPane. I was wondering if there was a way
to display the XML formatted with color/text/etc. (Basically, I'm
wondering if I can associated an XML style.) I've searched a bit, but
I haven't been able to get anything to work.
Thanks
- 10
- Need server-side solution to linking in framesDear all,
I am doing some maintainance in a JSP website which has been built
using frames (and I cannot remove that unfortunately).
So, I have 4 frames (top, and 3 vertical frames underneath the top).
The frame on the left is supposed to be for navigation, but when I
click on some navigation items, I am enforced to set the target to the
own navigation frame, because I need to do some other processing
(which I cannot avoid), and in the end I am using some javascript code
to change the location of the center frame (which in an ideal case
would be the target of the link on the navigation).
Does anyone know a way to avoid the javascript? Is there anyway that I
can load 2 different urls in 2 different frames via a single link? The
first URL is just a different set of parameters to the navigation
menu, and the second URL is the target of the navigation.
Best regards,
Pablo
- 11
- I only invest in Jeff Relf.Hi Hot Tamales !,
You related another gem ( What a guy ),
" Internet and technology stocks
have netted me a loss of approximately 20%.
FCEL, my one energy investment,
has netted me a gain of 20%.
I think Energy
( cells, hydrogen, renewable, even nuclear )
are the next wave. "
The value of FCEL didn't go up,
the value of the dollar,
( i.e. the stock of the U.S. government ), went down.
I only invest in Jeff Relf, not that I'm doing any better.
- 12
- Need help in validating the period in an email address. (new Java student)I am a new Java student and would appreciate a little help.
What I need is to be able to validate the period as the fourth from
the last character in an email address and return focus if the address
is invalid. The best I have been able to do is a good address on the
first attempt. If an incorrect address is entered first I am unable to
get it to accept a good address from then on. The code below is what I
have left after removing everything that did not work.
Is there anyone here that can provide some assistance. Thanks
// validate the e-mail
var RegeMail=document.Register.eMail.value
var atSign = RegeMail.indexOf("@")
if (RegeMail == " " || atSign == -1) {
alert("Please enter your e-mail address")
document.Register.eMail.value = " "
document.Register.eMail.focus()
}
- 13
- What it the type of the Class without modifierRoedy Green <email***@***.com> wrote:
> This is one of my pet peeves . It does not have a name. It is
> referred to with religious reverence by an indirect name "default"
> which tells you where in is used. Some heretics dare name it
> "package".
Hey, are you calling me a heretic?!? :)
--
www.designacourse.com
The Easiest Way To Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation
- 14
- Paramaters in EL?Hi All!
Is it possible to do this:
<%String deptName = (String)request.getParameter("deptName");
Department dept = org.getDepartment(deptName); %>
With just c:set or jsp:useBean tags?
Rob
:)
- 15
- Swing runtime problems / Java installation problemsHello all. I have a very simple problem. I am seeking to develop
java apps on mepis linux (ver. 3.4-3). I have installed jdk 1.6.0 and
i am having runtime error problems. It seems like a simple matter,
but i do not know how to solve the problem i am having. I have
compiled the following code directly from the sun website...
package start;
/*
* HelloWorldSwing.java requires no other files.
*/
import javax.swing.*;
public class HelloWorldSwing {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
when i compile, nothing seems to be wrong...
Aesotericon@5[HelloWorldSwing]$ ls
HelloWorldSwing.java
Aesotericon@5[HelloWorldSwing]$ /home/Aesotericon/Documents/jdk1.6.0/
bin/javac HelloWorldSwing.java
Aesotericon@5[HelloWorldSwing]$ ls
HelloWorldSwing$1.class HelloWorldSwing.class HelloWorldSwing.java
Aesotericon@5[HelloWorldSwing]$
when i try to run the program the following happens...
Aesotericon@5[HelloWorldSwing]$ /home/Aesotericon/Documents/jdk1.6.0/
bin/java HelloWorldSwing
Exception in thread "main" java.lang.NoClassDefFoundError:
HelloWorldSwing (wrong name: start/HelloWorldSwing)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:
260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:
276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:
319)
Aesotericon@5[HelloWorldSwing]$ /home/Aesotericon/Documents/jdk1.6.0/
bin/java .HelloWorldSwing
Exception in thread "main" java.lang.NoClassDefFoundError: /
HelloWorldSwing
Aesotericon@5[HelloWorldSwing]$ unset CLASSPATH
Aesotericon@5[HelloWorldSwing]$ /home/Aesotericon/Documents/jdk1.6.0/
bin/java HelloWorldSwing
Exception in thread "main" java.lang.NoClassDefFoundError:
HelloWorldSwing (wrong name: start/HelloWorldSwing)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:
260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:
276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:
319)
Aesotericon@5[HelloWorldSwing]$ /home/Aesotericon/Documents/jdk1.6.0/
bin/java .HelloWorldSwing
Exception in thread "main" java.lang.NoClassDefFoundError: /
HelloWorldSwing
As you all see, I have tried several methods of running the program,
but it will not work. I feel like a simpleton, but does anyone have
any suggestions? It seems that java is having a hard time finding
my .class file. I dunno...
J.P.
|
|
|