how can I use JTable as celleditor?

Anyone can help me with some example code?
[49 byte] By [SuperErika] at [2007-11-26 16:25:15]
# 1

Maybe display a poup dialog that displays a table. This should get you pointed in the right direction:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.table.*;

/*

* The editor button that brings up the dialog.

*/

//public class TablePopupEditor extends AbstractCellEditor

public class TablePopupEditor extends DefaultCellEditor

implements TableCellEditor, ActionListener

{

private PopupDialog popup;

private String currentText = "";

private JButton editorComponent;

public TablePopupEditor()

{

super(new JTextField());

setClickCountToStart(2);

// Use a JButton as the editor component

editorComponent = new JButton();

editorComponent.setBackground(Color.white);

editorComponent.setBorderPainted(false);

editorComponent.setContentAreaFilled( false );

//editorComponent.addActionListener( this );

// Set up the dialog where we do the actual editing

popup = new PopupDialog();

}

public Object getCellEditorValue()

{

return currentText;

}

public Component getTableCellEditorComponent(

JTable table, Object value, boolean isSelected, int row, int column)

{

SwingUtilities.invokeLater(new Runnable()

{

public void run()

{

popup.setText( currentText );

popup.setLocationRelativeTo( editorComponent );

popup.show();

fireEditingStopped();

}

});

currentText = value.toString();

editorComponent.setText( currentText );

return editorComponent;

}

/*

*When the editor button is clicked display the editing dialog

*/

public void actionPerformed(ActionEvent e)

{

popup.setText( currentText );

popup.setLocationRelativeTo( editorComponent );

popup.show();

// Since dialog is modal editing will only stop when the

// dialog is closed

fireEditingStopped();

}

/*

*Simple dialog containing the actual editing component

*/

class PopupDialog extends JDialog implements ActionListener

{

private JTextArea textArea;

public PopupDialog()

{

super((Frame)null, "Change Description", true);

textArea = new JTextArea(5, 20);

textArea.setLineWrap( true );

textArea.setWrapStyleWord( true );

KeyStroke keyStroke = KeyStroke.getKeyStroke("ENTER");

textArea.getInputMap().put(keyStroke, "none");

JScrollPane scrollPane = new JScrollPane( textArea );

getContentPane().add( scrollPane );

JButton cancel = new JButton("Cancel");

cancel.addActionListener( this );

JButton ok = new JButton("Ok");

ok.setPreferredSize( cancel.getPreferredSize() );

ok.addActionListener( this );

JPanel buttons = new JPanel();

buttons.add( ok );

buttons.add( cancel );

getContentPane().add(buttons, BorderLayout.SOUTH);

pack();

getRootPane().setDefaultButton( ok );

}

public void setText(String text)

{

textArea.setText( text );

}

/*

*Save the changed text before hiding the popup

*/

public void actionPerformed(ActionEvent e)

{

if ("Ok".equals( e.getActionCommand() ) )

{

currentText = textArea.getText();

}

textArea.requestFocusInWindow();

setVisible( false );

}

}

public static void main(String[] args)

{

String[] columnNames = {"Item", "Description"};

Object[][] data =

{

{"Item 1", "Description of Item 1"},

{"Item 2", "Description of Item 2"},

{"Item 3", "Description of Item 3"}

};

JTable table = new JTable(data, columnNames);

table.getColumnModel().getColumn(1).setPreferredWidth(300);

table.setPreferredScrollableViewportSize(table.getPreferredSize());

JScrollPane scrollPane = new JScrollPane(table);

// Use the popup editor on the second column

TablePopupEditor popupEditor = new TablePopupEditor();

table.getColumnModel().getColumn(1).setCellEditor( popupEditor );

JFrame frame = new JFrame("Popup Editor Test");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().add( scrollPane );

frame.pack();

frame.setLocationRelativeTo( null );

frame.setVisible(true);

}

}

camickra at 2007-7-8 22:49:17 > top of Java-index,Desktop,Core GUI APIs...
# 2
thanks for reply!but I need something like this: http://www.efsolutions.it/SwingTableInComboBox.pngIn this case, I shall use the combobox you seen like a cell editor.What you think about this solutions?
SuperErika at 2007-7-8 22:49:17 > top of Java-index,Desktop,Core GUI APIs...