[Webinar] Streamline your web hosting managementRegister Today


JTable questions

Posted on 1999-11-08
Medium Priority
Last Modified: 2013-11-23
I'm working with a JTable and I was wondering how do I perform the following tasks.  I know I'm lazy right now, I could look it up.  Anyway, I want to have it so I can double click on one row and a new frame will be populated with that date.  So I figure I need to have some kind of listener, I just don't know which one.  Secondly, I would like to make a certain column editable, so that I may change a value in the table, and save it to the database.  Thirdly, I would like to have one of the rows being a combo box with predefined values.  I figure these are all possible, again I'm just lazy.
Question by:srobia

Expert Comment

ID: 2193036
>Secondly, I would like to make a >certain column editable
You can do this by override isCellEditable method

JTable table = new JTable(dm){
  public boolean isCellEditable(int row, int column){
      return (column==0);
  // column 0 will be editable

>Thirdly, I would like to have one of >the rows being a combo box with >predefined values
 take a look at :



Accepted Solution

shaveri earned 200 total points
ID: 2196004
Try out the foll.....

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.*;

import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Color;

public class TableDemo {

    public TableDemo() {
        JFrame frame = new JFrame("Table");
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}});

        // Take the dummy data from SwingSet.
        final String[] names = {"First Name", "Last Name", "Favorite Color",
                                "Favorite Number", "Vegetarian"};
        final Object[][] data = {
          {"Mark", "Andrews", "Red", new Integer(2), new Boolean(true)},
          {"Tom", "Ball", "Blue", new Integer(99), new Boolean(false)},
          {"Alan", "Chung", "Green", new Integer(838), new Boolean(false)},
          {"Jeff", "Dinkins", "Turquois", new Integer(8), new Boolean(true)},
          {"Amy", "Fowler", "Yellow", new Integer(3), new Boolean(false)},
          {"Brian", "Gerhold", "Green", new Integer(0), new Boolean(false)},
          {"James", "Gosling", "Pink", new Integer(21), new Boolean(false)},
          {"David", "Karlton", "Red", new Integer(1), new Boolean(false)},
          {"Dave", "Kloba", "Yellow", new Integer(14), new Boolean(false)},
          {"Peter", "Korn", "Purple", new Integer(12), new Boolean(false)},
          {"Phil", "Milne", "Purple", new Integer(3), new Boolean(false)},
          {"Dave", "Moore", "Green", new Integer(88), new Boolean(false)},
          {"Hans", "Muller", "Maroon", new Integer(5), new Boolean(false)},
          {"Rick", "Levenson", "Blue", new Integer(2), new Boolean(false)},
          {"Tim", "Prinzing", "Blue", new Integer(22), new Boolean(false)},
          {"Chester", "Rose", "Black", new Integer(0), new Boolean(false)},
          {"Ray", "Ryan", "Gray", new Integer(77), new Boolean(false)},
          {"Georges", "Saab", "Red", new Integer(4), new Boolean(false)},
          {"Willie", "Walker", "Phthalo Blue", new Integer(4), new Boolean(false)},
          {"Kathy", "Walrath", "Blue", new Integer(8), new Boolean(false)},
          {"Arnaud", "Weber", "Green", new Integer(44), new Boolean(false)}

        // Create a model of the data.
        TableModel dataModel = new AbstractTableModel() {
            // These methods always need to be implemented.
            public int getColumnCount() { return names.length; }
            public int getRowCount() { return data.length;}
            public Object getValueAt(int row, int col) {return data[row][col];}

            // The default implementations of these methods in
            // AbstractTableModel would work, but we can refine them.
            public String getColumnName(int column) {return names[column];}
            public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
            public boolean isCellEditable(int row, int col) {return true;}
            public void setValueAt(Object aValue, int row, int column) {
                System.out.println("Setting value to: " + aValue);
                data[row][column] = aValue;

        // Create the table
        JTable tableView = new JTable(dataModel);
        // Turn off auto-resizing so that we can set column sizes programmatically.
      // In this mode, all columns will get their preferred widths, as set blow.

      // Create a combo box to show that you can use one in a table.
      JComboBox comboBox = new JComboBox();

        TableColumn colorColumn = tableView.getColumn("Favorite Color");
        // Use the combo box as the editor in the "Favorite Color" column.
        colorColumn.setCellEditor(new DefaultCellEditor(comboBox));

        // Set a pink background and tooltip for the Color column renderer.
        DefaultTableCellRenderer colorColumnRenderer = new DefaultTableCellRenderer();
        colorColumnRenderer.setToolTipText("Click for combo box");

        // Set a tooltip for the header of the colors column.
      TableCellRenderer headerRenderer = colorColumn.getHeaderRenderer();
      if (headerRenderer instanceof DefaultTableCellRenderer)
          ((DefaultTableCellRenderer)headerRenderer).setToolTipText("Hi Mom!");

      // Set the width of the "Vegetarian" column.
        TableColumn vegetarianColumn = tableView.getColumn("Vegetarian");

      // Show the values in the "Favorite Number" column in different colors.
        TableColumn numbersColumn = tableView.getColumn("Favorite Number");
        DefaultTableCellRenderer numberColumnRenderer = new DefaultTableCellRenderer() {
          public void setValue(Object value) {
              int cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0;
              setForeground((cellValue > 30) ? Color.black : Color.red);
              setText((value == null) ? "" : value.toString());

        // Finish setting up the table.
        JScrollPane scrollpane = new JScrollPane(tableView);
        scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
        scrollpane.setPreferredSize(new Dimension(430, 200));

    public static void main(String[] args) {
        new TableDemo();


Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
THe viewer will learn how to use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.

590 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question