import java.awt.Component;
import java.util.EventObject;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.CellEditorListener;
import javax.swing.table.TableCellEditor;
public class ComboBoxEditor extends JComboBox implements TableCellEditor {
public ComboBoxEditor(Vector<String> items) {
super(items);
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
if(row == 0)
{
return this;
}
else
{
return new JTextField(value.toString());
}
}
@Override
public void addCellEditorListener(CellEditorListener l) {
// TODO Auto-generated method stub
}
@Override
public void cancelCellEditing() {
// TODO Auto-generated method stub
}
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
// TODO Auto-generated method stub
return true;
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
// TODO Auto-generated method stub
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean stopCellEditing() {
// TODO Auto-generated method stub
return false;
}
}
[JAVA=24]
return new JTextField(value.toString());[/code]
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
public class ComboBoxEditor extends AbstractCellEditor implements TableCellEditor {
public JComboBox names;
public ComboBoxEditor() {
super();
names = new JComboBox(MainFrame.names);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
if(row == 0)
{
return names;
}
else
{
return null;
}
}
@Override
public Object getCellEditorValue() {
// müsset da irgendwie zwischen names.getSelectedItem() und dem inhalt des Standardtextfeldes unterscheiden
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableCellEditorRowDemo extends JFrame {
public JTableCellEditorRowDemo() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(0, 0, 500, 300);
this.setLocationRelativeTo(null);
DefaultTableModel model = new DefaultTableModel();
model.setDataVector(new Object[][] {{"Eintrag1", "Eintrag2"}, {"Test", "Test"}}, new Object[]{"Spalte 1", "Spalte 2"});
EditorTable table = new EditorTable(model);
table.setRowHeight(20);
this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
}
public static void main(String[] args) {
new JTableCellEditorRowDemo().setVisible(true);
}
class EditorTable extends JTable {
ComboBoxEditor editor;
public EditorTable(TableModel model) {
super(model);
editor = new ComboBoxEditor();
}
public TableCellEditor getCellEditor(int row, int column) {
if (row==0)
return editor;
return super.getCellEditor(row, column);
}
}
class ComboBoxEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
private JComboBox combo;
public ComboBoxEditor() {
combo = new JComboBox(new Object[]{"Eintrag1", "Eintrag2", "Eintrag3"});
combo.addActionListener(this);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
combo.setSelectedItem(value);
return combo;
}
public Object getCellEditorValue() {
return combo.getSelectedItem();
}
public void actionPerformed(ActionEvent evt) {
this.stopCellEditing();
}
}
}