JTable cell with colored string

Hi,
How can I make colored string in cell (string with different colors) ?

Supposing you haven't used your own customized cell renderers, the following code must work..
((DefaultTableCellRenderer)<<yourtable>>.getCellRenderer(<row>, <col>)).setForeground(Color.BLUE);
This will paint all the cells of same type as cell(<row>, <col>) in blue.
If you want only certain cells in your table to be painted in a perticular colour, you may have to write a customized renderer yourself, extending the javax.swing.table.DefaultTableCellRenderer class, and override its getTableCellRendererComponent(...) method as per your required functionality.

Similar Messages

  • JTable Cell with two icons

    Hello -
    I'm rather new to Java, so please excuse me if this is a simple question. For a project I am working on, I am attempting to deal with placing two icons in a single JTable cell. For the life of me I have no idea if this is even feasible, let alone how I would implement it. Originally I thought about attempting to overload the JLabel class (as this is what the JTable cell is based upon, if I'm not mistaken?) and allowing two icons to be placed per label.
    Am I on the right track? Is this even possible? Any suggestions?
    Thanks much.

    Please read the forum for JTable.
    http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
    You will know that you canuse any component as CellRenderer, this component can have whatever you want (say 2 icons and 5 comboboxes)
    here is short example that shows 2 icons in JTable
    import java.awt.*;
    import java.awt.image.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class TwoIcons extends JFrame {
         public static void main(String[] args){
              createIcons();
              SwingUtilities.invokeLater
                   new Runnable()
                        public void run() {
                             new TwoIcons();
         public TwoIcons(){
              super("Test");
              DefaultTableModel tm = new DefaultTableModel(
                   new Object[][]{
                        {new IconPair("cross", "cross"), "just a string"},
                        {new IconPair("circle", "cross"),"just another string"},
                        {new IconPair("String", "circle"),"yet another string"}
                   }, new String[]{"Two Icons","String"}){
                   public Class getColumnClass(int columnIndex){
                        if(columnIndex==0){
                             return IconPair.class;
                        else
                             return super.getColumnClass(columnIndex);
              JTable table = new JTable(tm);
              final Color bg = table.getBackground();
              table.setDefaultRenderer(IconPair.class, new TableCellRenderer(){
                        RendererPanel renderer = new RendererPanel(bg);
                        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                             renderer.setIcons((IconPair)value);
                             return  renderer;
              JScrollPane scp = new JScrollPane(table);
              add(scp);
              setSize(400,100);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              pack();
              setVisible(true);
         class RendererPanel extends JPanel{
              JLabel tf1,tf2;
              RendererPanel(Color bg){
                   setLayout(new BoxLayout(this,BoxLayout.LINE_AXIS) );
                   tf1=new JLabel();
                   tf2=new JLabel();
                   add(tf1);
                   add(Box.createRigidArea(new Dimension(5,0)));
                   add(tf2);
                   setBackground(bg);
              public void setIcons(IconPair value) {
                   tf1.setIcon(value.i1);
                   tf2.setIcon(value.i2);
                   //uncomment next 2 lines if you want text as well
    //               tf1.setText(value.s1);
    //               tf2.setText(value.s2);
         class IconPair {
              public Icon i1,i2;
              public String s1,s2;
              IconPair(String s1, String s2){
                   this.i1=icons.get(s1);
                   this.i2=icons.get(s2);
                   this.s1=s1;
                   this.s2=s2;
         static Map<String,Icon> icons = new HashMap<String,Icon>();
         public static  void createIcons(){
              Image img = new BufferedImage(10,10, BufferedImage.TYPE_INT_ARGB);
              Graphics2D g2=(Graphics2D)(img.getGraphics());
              g2.setColor(Color.RED);
              g2.drawLine(0,0,10,10);
              g2.drawLine(0,10,10,0);
              icons.put("cross",new ImageIcon(img));
              img = new BufferedImage(10,10, BufferedImage.TYPE_INT_ARGB);
              g2=(Graphics2D)(img.getGraphics());
              g2.setColor(Color.GREEN);
              g2.drawOval(1,1,8,8);
              icons.put("circle",new ImageIcon(img));
    }

  • JTable cell background color

    Hi All,
    I want to change the background color of the same of the cells in jTabel. How can I do that.
    Like, I want to keep 3 cells in red color. Another 2 cells in in green color, And keep other cell background color to default.
    Also I want to change the background color of the cell, with different selection in other component(like jTree, jList).
    Thank you,
    Avin Patel

    The same cell renderer is used by all cells of the table. You can't just set the background color of a cell once. You have to reset it every time the cell renderer is called (depending on which row/column you are being asked to render). Here is an example:
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class TableCell extends JFrame
         JTable table;
         public TableCell()
              Object[][] data = { {"1", "A"}, {"2", "B"}, {"3", "C"}, {"4", "D"}  };
              String[] columnNames = {"Number","Letter"};
              DefaultTableModel model = new DefaultTableModel(data, columnNames);
              table = new JTable( model );
              //  Set default cell renderer
              TableCellRenderer renderer = new TestRenderer();
              table.setDefaultRenderer(Object.class, renderer);
              JScrollPane scrollPane = new JScrollPane( table );
              getContentPane().add( scrollPane );
         public static void main(String[] args)
              TableCell frame = new TableCell();
              frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
              frame.pack();
              frame.setVisible(true);
         class TestRenderer extends DefaultTableCellRenderer
              public Component getTableCellRendererComponent(
                   JTable table,
                   Object value,
                   boolean isSelected,
                   boolean hasFocus,
                   int row,
                   int column)
                   super.getTableCellRendererComponent(table,
                   value, isSelected, hasFocus, row, column);
                   if (column == 0)
                        setHorizontalAlignment( LEFT );
                        setBackground( Color.blue );
                   else
                        setHorizontalAlignment( RIGHT );
                        setBackground( Color.green );
                   if (row == 1)
                        setBackground( Color.red );
                   return this;
    }

  • JTable cell Background Color problem

    I overriden the table renderer and tried to chenge the color of only that row which has greater value in the third column. I coded the logic but it set the color of all the rows. The custom tablecellrendere code is as follows
          public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int column)
                cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                   if(vuti[0]==0)
                        //cell.setBackground(Color.pink);
                        vuti[0]=counter;
                   else
                        if (counter>vuti[0] && !isSelected)
                          vuti[0]=counter;
                          cell.setBackground(Color.lightGray);
                      else if(counter<vuti[0])
                        cell.setBackground(Color.white);
                return cell;
          }

    In the code that sets the background, you have a if - else (if - else if) structure. What's the default setting, when none of the 3 conditions are met?
    And learn to indent your code correctly so that code blocks are readily apparent.
    [http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html]
    db

  • JTable cell border color

    Hi All,
    How do i change the JTable's specific cell border color and set the cursor into that cell.
    Thanks.

    Write your own renderer.
    [Look at this example.|http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=2&t=004710]

  • JTable Cells with different Color according to value

    Pls help I want to be able to display all rows (students) that paid more than 20 naira in Green
    else display rows (student) that paid < 20 naira in red
    But at the moment it is displaying everything in green why?
    tmp is the variable
    Code would help pls!
    class TestRenderer extends DefaultTableCellRenderer     
    public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,               int column)          
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);          
    if (row > 0)               
    for (int i =0; i < table.getRowCount(); i++)
    String tmpString = (String) table.getValueAt(i,3);
    if (tmpString != null)
    double tmp = Double.parseDouble(tmpString);
    if (tmp > 20)
    System.out.println("Variable is "+tmp);
    setBackground( Color.green );
    else
    setBackground( Color.red );     
    return this;

    Get rid of that loop
    String tmpString = (String) table.getValueAt(row,3);

  • Traverse JTable cells with arrow keys?

    I want to be able to use arrow keys to travel in the matrix. But I want to restrict entering column 0. That is, the user should not be able to enter column 0, with the arrow keys (and neither using the mouse). Anyone have hints how to do this?

    Well, the problem is that I have a viewport into a big matrix. The user is able to scroll the viewport around.
    I must be able to figure out if the user is pressing the arrow buttons to go outside the viewport, because then I have to change the viewport. Somewhere, there is a class that knows the current cell that is highlighted. I must check that class to see what direction the user wants to go with the highlighted cell.
    And, also, the user is not allowed to enter column 0. If he wants to go column 0, then the viewport will be scrolled.
    So my question is, which class knows which cell is highlighted? The Jtable, probably? Which methods?

  • Fill table cells with color % depending on cell content

    Hi.
    I'm working on a document with a lot of tables filled with percentages. The tables are originally on a Word document and the table cells are tinted according to their content: a value of 20% on the cell corresponds to a tint of 20%. This is done automatically on the Word document through a conditional formatting option that applies a graded color scale. Is there any way to do this in InDesign? I tried placing the tables and tried all options, but the color is not imported. Perhaps a script or a GREP style?
    Thank you.

    Conditional formatting in Word is done via formula, but in Excel it is handled more "on the surface" and Excel's conditional formatting carries into InDesign nicely via Place or Paste. It could be worth considering moving those tables into Excel.
    InDesign doesn't do this kind of formatting as a native function, but it couldn't hurt to ask about possible scripted solutions in the Scripting Forum.

  • JTable - cell selection color

    Hello.
    I have this problem. Consider a JTable. When I select a cell it appears with a light blue background and a blue border. How do I change that blue border to red, for example?
    Many thanks,
    Afonso

    You can change it for all tables using the UIManager. "Table.focusCellHighlightBorder" property. See [UIManager Defaults|http://www.camick.com/java/blog.html?name=uimanager-defaults] for more information.
    For individual tables you could probably override the prepareRenderer(...) method to manually set the Border.

  • Skipping jTable cells with tab

    When a user presses tab, the selected cell moves to the next cell to the right.
    Is there a way that when the user presses tab, that the next cell will be skipped, and the following one will be selected?
    Thanks

    Ok I gave you the weekend :)
    bump
    I thought it would be in the DefaultCellEditor, but no luck there.
    Any help is appreciated.

  • Editing/Assigning each JTable cell with a unique JComboBox

    unique JComboBox meaning the contents of each will be different for each cell.
    anyone have any ideas how to go about doing this?
    Seems like you can set a DefaultCellEditor for each column only.

    problem sorted, used a modified version of http://forum.java.sun.com/thread.jspa?forumID=57&threadID=327150
    where i used my underlying datamodel instead of the predefined combo boxes in that example

  • Conditional Formatting in one cell with a dates in another cell

    I have a simple spreadsheet that will gauge a project's progress.  I wish to have individual cells change color based on another cell.  I can't get the right syntax in order - groan
    E2 has today's date, =NOW()
    G2 (not started) would change from a color to no color when the start date, F27,  has arrived then
    H2 (started) would change to a color when the date is met, F27, (may be change color as the completed date arrives) then no color when the completed date arrives, F28.
    I2 (completed) would change to a color when the date is met, F28
    When the spread sheet is opened or if I need to change the dates in either of the cells the cells with color gauges will update.
    I am using conditional formating through the ribbon.
    Please help!

    Hi,
    Thank you for posting in the MSDN Forum.
    Since the issue is more relate to the end-user, I'd like to move it to Excel IT pro forum.
    The reason why we recommend posting appropriately is you will get the most qualified pool of respondents, and other partners who read the forums regularly can either share their knowledge or learn from your interaction with us.
    Thanks for your understanding.
    Best regards
    Fei
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Button to change bg-color in JTable cell

    Hello!
    I would like to change the background color of a cell with a klick on a button.
    There will be 3 colors, and the selected cell are the only one thats going to change.
    How do I do that?
    Heres my code:
    import javax.swing.*;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Rectangle;
    import javax.swing.JButton;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableModel;
    public class Kinna extends JFrame {
         private static final long serialVersionUID = 1L;
         private JPanel jContentPane = null;
         private JTabbedPane jTabbedPane = null;
         private JScrollPane jScrollPane = null;
         private JTable jTable = null;
         private JButton jButtonRed = null;
         private JButton jButtonGreen = null;
         private JButton jButtonBlue = null;
         private JButton jButtonNewWeek = null;
         private JButton jButtonDelWeek = null;
          * This method initializes jTabbedPane     
          * @return javax.swing.JTabbedPane     
         private JTabbedPane getJTabbedPane() {
              if (jTabbedPane == null) {
                   jTabbedPane = new JTabbedPane();
                   jTabbedPane.setBounds(new Rectangle(105, 45, 545, 488));
                   jTabbedPane.addTab(null, null, getJScrollPane(), null);
              return jTabbedPane;
          * This method initializes jScrollPane     
          * @return javax.swing.JScrollPane     
         private JScrollPane getJScrollPane() {
              if (jScrollPane == null) {
                   jScrollPane = new JScrollPane();
                   jScrollPane.setViewportView(getJTable());
              return jScrollPane;
          * This method initializes jTable     
          * @return javax.swing.JTable     
         private JTable getJTable() {
              if (jTable == null) {
                   Object[] head = {"Namn", "M�ndag", "Tisdag", "Onsdag", "Torsdag", "Fredag"};
                   Object[][] data = {{"Niklas", "9-15", "9-15", "9-15", "9-15","9-15"},
                                            {"Niklas", "9-15", "9-15", "9-15", "9-15","9-15"}};
                   jTable = new JTable(data, head);
                      // This table shades every other column yellow
              return jTable;
          * This method initializes jButtonRed     
          * @return javax.swing.JButton     
         private JButton getJButtonRed() {
              if (jButtonRed == null) {
                   jButtonRed = new JButton("R�d");
                   jButtonRed.setBounds(new Rectangle(15, 30, 76, 31));
                   jButtonRed.setText("R�d");
                   jButtonRed.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent e) {
              return jButtonRed;
          * This method initializes jButtonGreen     
          * @return javax.swing.JButton     
         private JButton getJButtonGreen() {
              if (jButtonGreen == null) {
                   jButtonGreen = new JButton("R�d");
                   jButtonGreen.setBounds(new Rectangle(15, 75, 76, 31));
                   jButtonGreen.setText("Gr�n");
              return jButtonGreen;
          * This method initializes jButtonBlue     
          * @return javax.swing.JButton     
         private JButton getJButtonBlue() {
              if (jButtonBlue == null) {
                   jButtonBlue = new JButton("R�d");
                   jButtonBlue.setBounds(new Rectangle(15, 120, 76, 31));
                   jButtonBlue.setText("Bl�");
              return jButtonBlue;
          * This method initializes jButtonNewWeek     
          * @return javax.swing.JButton     
         private JButton getJButtonNewWeek() {
              if (jButtonNewWeek == null) {
                   jButtonNewWeek = new JButton();
                   jButtonNewWeek.setBounds(new Rectangle(270, 0, 91, 31));
                   jButtonNewWeek.setText("Ny Vecka");
                   jButtonNewWeek.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent e) {
                             System.out.println("actionPerformed()");
                             int i = getJTabbedPane().getSelectedIndex() + 1;
                             String tab = "Index: " + i;
                             getJTabbedPane().addTab(tab, new JLabel("Hello"));
                             getJTabbedPane().setSelectedIndex(getJTabbedPane().getTabCount()-1);
              return jButtonNewWeek;
          * This method initializes jButtonDelWeek     
          * @return javax.swing.JButton     
         private JButton getJButtonDelWeek() {
              if (jButtonDelWeek == null) {
                   jButtonDelWeek = new JButton();
                   jButtonDelWeek.setBounds(new Rectangle(375, 0, 121, 31));
                   jButtonDelWeek.setText("Ta bort vecka");
                   jButtonDelWeek.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent e) {
                             System.out.println("actionPerformed()");
                             getJTabbedPane().removeTabAt(getJTabbedPane().getSelectedIndex());
              return jButtonDelWeek;
          * @param args
         public static void main(String[] args) {
              SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                        Kinna thisClass = new Kinna();
                        thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        thisClass.setVisible(true);
          * This is the default constructor
         public Kinna() {
              super();
              initialize();
          * This method initializes this
          * @return void
         private void initialize() {
              this.setSize(670, 580);
              this.setContentPane(getJContentPane());
              this.setTitle("JFrame");
          * This method initializes jContentPane
          * @return javax.swing.JPanel
         private JPanel getJContentPane() {
              if (jContentPane == null) {
                   jContentPane = new JPanel();
                   jContentPane.setLayout(null);
                   jContentPane.add(getJTabbedPane(), null);
                   jContentPane.add(getJButtonRed(), null);
                   jContentPane.add(getJButtonGreen(), null);
                   jContentPane.add(getJButtonBlue(), null);
                   jContentPane.add(getJButtonNewWeek(), null);
                   jContentPane.add(getJButtonDelWeek(), null);
              return jContentPane;
    }  //  @jve:decl-index=0:visual-constraint="29,25"

    If you have a different color for every cell in the table, then maybe it would be easier to store a custom Object in the TableModel that has two pieces of information:
    a) the text to be displayed
    b) the background color of the text.
    Then you can write a custom renderer that uses both pieces of information to renderer the cell correctly.
    Here is an untested example of what the custom renderer might look like:
    class ColorRenderer extends DefaultTableCellRenderer
         public Component getTableCellRendererComponent(
                   JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
              super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
              CustomObject custom = (CustomObject)value;
              setText( custom.getText() );
              if (!isSelected)
                   setBackground( custom.getBackground() );
              return this;
    }

  • Dynamic colored in theh JTable cell

    Hi, All
    I am using a JTable to display a Jlable in the JTable cells.
    The lable is divided to, say 10 , sub rectangles. I would liketo fill each rectangles with different bg colors depending on the data I received. I tried to use html in the JLable to control the color, however, it is very expensive cuase it involves a lot of string process and also it is difficult to control the dimension of those rectangles. Do anyone has any better idea to do this ?
    The cell is not necessary to be a JLable, by the way.
    Thanks in advance !

    I have never used JPanel as my table cell component, but u might want to implement performance improvements similiar to ones done in DefaultTableCellRenderer which extends JLabel.
    Here is the code extract from DefaultTableCellRenderer
    * The following methods are overridden as a performance measure to
    * to prune code-paths are often called in the case of renders
    * but which we know are unnecessary. Great care should be taken
    * when writing your own renderer to weigh the benefits and
    * drawbacks of overriding methods like these.
    * Overridden for performance reasons.
    * See the Implementation Note
    * for more information.
    public void validate() {}
    * Overridden for performance reasons.
    * See the Implementation Note
    * for more information.
    public void revalidate() {}
    * Overridden for performance reasons.
    * See the Implementation Note
    * for more information.
    public void repaint(long tm, int x, int y, int width, int height) {}
    * Overridden for performance reasons.
    * See the Implementation Note
    * for more information.
    public void repaint(Rectangle r) { }

  • Change cell's color in jtable when user clicks on it

    Hi everyone,
    i've got a JTable, and would like to change the background of a cell when user selects it
    so i added a mouselistener over my jtable, the mousereleased method looks like this:
              public void mouseReleased(MouseEvent e) {
                   int row = table.rowAtPoint(e.getPoint());
                   int column = table.columnAtPoint(e.getPoint());
                            // help needed
              }as you see, i found the code to get the index of the cell selected, but i don't find any method in JTable class to get the cell component itself, and to alter its background color
    Please notice that the "setSelectionBackground()" in JTable isn't enough, since i would also like to change the color of cells which are not selected when the user select a cell
    how could i do that?
    Thanks in advance!
    edit: i tried the following but it does not work either
              public void mouseReleased(MouseEvent e) {
                   int row = table.rowAtPoint(e.getPoint());
                   int column = table.columnAtPoint(e.getPoint());
                   AbstractTableModel atm = (AbstractTableModel) table.getModel();
                   Component cell = table.getDefaultRenderer(CaseMemoire.class).
                   getTableCellRendererComponent(table, atm.getValueAt(row, column), true, true, row, column);
                   cell.setBackground(Color.MAGENTA);
                   table.updateUI();
              }

    ok i found how to do it
    i directly inserted this in the renderer code:
    if (row == table.getSelectedRow() && column == table.getSelectedColumn())
    cell.setBackground(etc);
    (curiously it does not work with "if (isSelected)")
    thanks :)

Maybe you are looking for

  • Can't get my pci modem to work in the ms - 6215

    does anyone know how to get my pci modem to work in a ms - 6215, I've tried everything that I can think of including installing a modem  known to be good, since the motherboard is very unique in so that it has a riser that only has two pci slots on i

  • Installation media/download for Acrobat Standard 9.0

    I recently purchased a few licenses of Adobe Acrobat Standard 9.0, unfortunately there is no download appearing in my licensing page. It is there for others like CS4 but not for Acrobat Standard. I can never seem to get tech support over the phone so

  • Continually prompted to update 30 GB Color iPod to 1.2 software

    Every time I start iTunes, I get a message that a new version 1.2 is available. I then choose to download it, run setup, and that installs iTunes 6. I restart, then launch iTunes, and the process repeats. I can synch,and have done so multiple times.

  • 0x800096002 Error When trying to install a windows product in 8.1

    I'm trying to install Windows6.1-KB958559-x64-RefreshPkg from windows and i keep getting the 0x800096002 error any help? This is a Valid Signature from Microsoft as this is an Official product so there shouldn't be any problems. If anyone knows an an

  • Stuck On Software Update!

    I'm trying to install the new software update. Everything was fine until a pop up window asked me to quit itunes so system could continue with update. I quit itunes (clicked on the red x in left corner of page) but the system doesn't recognize the fa