Hi zusammen!
Ich habe mir für eine JTable einen eigenen Editor geschrieben, welcher eine JComboBox nutzt.
Leider funktioniert das mit der Werteübergabe von Editor an Tabellenmodel nicht so wirklich.
Denn nicht nur die eigene Zelle wird auf den selektierten Wert gesetzt, sondern die ganze Reihe..
Habe nur leider keine Idee, woran das liegen könnte...
Editor
Anzeige
*gruß*
Timo
Ich habe mir für eine JTable einen eigenen Editor geschrieben, welcher eine JComboBox nutzt.
Leider funktioniert das mit der Werteübergabe von Editor an Tabellenmodel nicht so wirklich.
Denn nicht nur die eigene Zelle wird auf den selektierten Wert gesetzt, sondern die ganze Reihe..
Habe nur leider keine Idee, woran das liegen könnte...
Editor
Code:
/*
* CustomEditor.java
*
* Created on 9. Juli 2007, 09:45
*/
import javax.swing.AbstractCellEditor;
import java.util.ArrayList;
import javax.swing.event.CellEditorListener;
import javax.swing.table.TableCellEditor;
import javax.swing.JComboBox;
import java.awt.event.MouseListener;
import javax.swing.event.ChangeEvent;
import java.util.EventObject;
import java.awt.event.KeyListener;
import javax.swing.JTextField;
import javax.swing.JLabel;
public class CustomEditor implements TableCellEditor,KeyListener{
private ArrayList cellListener = new ArrayList();
JComboBox box = null;
boolean started = false;
String ident;
/** Creates a new instance of CustomEditor */
public CustomEditor(JComboBox box, String ident) {
this.box = box;
this.box.addKeyListener(this);
this.ident = ident;
}
public void addCellEditorListener(CellEditorListener l){
cellListener.add(l);
}
public void removeCellEditorListener(CellEditorListener l){
cellListener.remove(l);
}
public CellEditorListener[] getCellEditorListeners(){
return (CellEditorListener[])cellListener.toArray();
}
public Object getCellEditorValue() {
System.out.println("Liefere Selektiertes Object = "+box.getSelectedItem()+" fuer "+ident);
return box.getSelectedItem();
}
public java.awt.Component getTableCellEditorComponent(javax.swing.JTable table, Object value, boolean isSelected, int row, int column) {
if(value!= null){
box.setSelectedItem(value);
}
return box;
}
public void cancelCellEditing(){
System.out.println("cancel edititing");
}
public boolean stopCellEditing(){
System.out.println("stop edititing");
return true;
}
public void fireEditingStopped(){
for(int i=0; i < cellListener.size(); i++){
CellEditorListener list = (CellEditorListener)cellListener.get(i);
System.out.println("fire edititing stopped");
list.editingStopped(new ChangeEvent(this));
}
}
public void fireEditingCanceled(){
for(int i=0; i < cellListener.size(); i++){
CellEditorListener list = (CellEditorListener)cellListener.get(i);
System.out.println("fire edititing cancel");
list.editingCanceled(new ChangeEvent(this));
}
}
public boolean isCellEditable(EventObject evt){
return true;
}
public boolean shouldSelectCell(EventObject evt){
return true;
}
public void keyPressed(java.awt.event.KeyEvent e) {
if(e.getKeyCode()==10)
fireEditingStopped();
}
public void keyReleased(java.awt.event.KeyEvent e) {
}
public void keyTyped(java.awt.event.KeyEvent e) {
}
}
Anzeige
Code:
/*
* TestFrame.java
*
* Created on 6. Juli 2007, 14:00
*/
import javax.swing.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class TestFrame extends JFrame{
private JTable table = null;
private DefaultTableColumnModel colModel = null;
private TableColumn col = null;
private CustomEditor editor = null;
private DefaultTableModel tabModel = null;
/** Creates new form TestFrame */
public TestFrame() {
initComponents();
setSize(400,400);
initFrame();
}
public void initFrame(){
String[] content1 = {"A","AB","BA","BB","C"};
String[] content2 = {"A","AB","BA","BB","CC"};
JComboBox box1 = new JComboBox(content1);
editor = new CustomEditor(box1,"Spalte 1");
colModel = new DefaultTableColumnModel();
col = new TableColumn();
col.setHeaderValue("Spalte 1");
col.setCellEditor(editor);
colModel.addColumn(col);
col = new TableColumn();
col.setHeaderValue("Spalte 2");
JComboBox box2 = new JComboBox(content2);
editor = new CustomEditor(box2,"spalte 2");
col.setCellEditor(editor);
colModel.addColumn(col);
tabModel = new DefaultTableModel(3,2);
table = new JTable(tabModel,colModel);
//table.setDefaultEditor(Object.class,editor);
this.getContentPane().add(table);
}
public static void main(String args[]) {
new TestFrame().show();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
getContentPane().setLayout(new java.awt.FlowLayout());
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
pack();
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
*gruß*
Timo