Hallo,
ich finde ums verrecken keine Möglichkeit, den Fokus auf eine Combobox innerhalb eines JTables zu setzen. Hat jemand einen Tipp? Beispielcode anbei:
vielen Dank im voraus
lazydog
ich finde ums verrecken keine Möglichkeit, den Fokus auf eine Combobox innerhalb eines JTables zu setzen. Hat jemand einen Tipp? Beispielcode anbei:
Code:
import java.awt.Component;
import java.awt.FlowLayout;
import java.util.EventObject;
import java.util.Hashtable;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class testframe extends JFrame{
private JComboBox combo;
private JTable table;
public testframe() {
super("Testframe");
this.setSize(600,400);
this.setLayout(new FlowLayout());
}
/**
* Create the GUI and show it
*/
private static void createAndShowGUI() {
//Create and set up the window.
testframe frame = new testframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setup the table
frame.buildTable();
//Display the window.
frame.setVisible(true);
// Hier nun soll der Fokus auf die Combobox!
// ...
}
/**
* setup the combo
*/
public JComboBox getCombo(){
JComboBox combo = new JComboBox();
combo.addItem("lazy");
combo.addItem("dog");
combo.addItem("lazydog");
return combo;
}
/**
* setup the table
*/
public void buildTable(){
combo = getCombo();
myTableModel tableModel = new myTableModel();
tableModel.setValueAt("firstVal", 0, 0);
tableModel.setValueAt("secondVal", 0, 1);
tableModel.setValueAt(combo, 0, 2);
table = new JTable(tableModel, null);
TableColumn tc = table.getColumn(table.getColumnName(2));
tc.setCellRenderer(new comboRenderer());
tc.setCellEditor(new comboEditor());
this.getContentPane().add(new JScrollPane(table));
}
/**
* renderer for the comboCells
*/
class comboRenderer implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
return (Component)value;
}
}
/**
* editor for the comboCells
*/
class comboEditor implements TableCellEditor{
public CellEditorListener cl;
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
return (Component)value;
}
public Object getCellEditorValue() {
return null;
}
public boolean isCellEditable(EventObject arg0) {
return true;
}
public boolean shouldSelectCell(EventObject arg0) {
return false;
}
public boolean stopCellEditing() {
return true;
}
public void cancelCellEditing() {
;
}
public void addCellEditorListener(CellEditorListener arg0) {
;
}
public void removeCellEditorListener(CellEditorListener arg0) {
;
}
}
/**
* model to control the table
*/
class myTableModel extends AbstractTableModel{
private Hashtable data = new Hashtable();
private int rowCount = 0, colCount = 0;
public int getRowCount() {
return rowCount;
}
public int getColumnCount() {
return colCount;
}
public void setValueAt(Object o, int row, int col) {
String key = "["+row+","+col+"]";
if (row+1 > rowCount) rowCount = row+1;
if (col+1 > colCount) colCount = col+1;
data.put(key, o);
}
public Object getValueAt(int row, int col) {
String key = "["+row+","+col+"]";
return this.data.get(key);
}
public boolean isCellEditable(int arg0, int arg1){
return true;
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
vielen Dank im voraus
lazydog