Fokus auf eine Combobox in einem JTable setzen

lazydog

Mitglied
Hallo,

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
 
Zurück