わかりました、これは説明するのが難しいものですが、私は最善を尽くします。
JTableにJTextFieldとJComboBoxがあり、そのgetCellEditorメソッドは次のようにオーバーライドされています。
public TableCellEditor getCellEditor( int row, int column ) {
if ( column == 3 ) {
// m_table is the JTable
if ( m_table.getSelectedRowCount() == 1 ) {
JComboBox choices = new JComboBox();
choices.setEditable( true );
choices.addItem( new String( "item 1" ) );
return new DefaultCellEditor( choices );
}
return super.getCellEditor( row, column );
}
動作の違いは次のとおりです(この時点から、JTextFieldまたはJComboBoxと言うときは、いずれかのコンポーネントを含むJTableのCELLを意味します)。
JTextFieldを1回クリックすると、セルが強調表示されます。ダブルクリックするとカレットが表示され、テキストを入力できます。一方、JComboBoxでは、シングルクリックすると、テキストを入力するためのキャレットと、コンボドロップダウンボタンが表示されます。
タブを押すか、矢印キーを使用してJTextFieldに移動してから入力を開始すると、入力した文字が自動的にセルに入力されます。一方、同じ方法でJComboBoxに移動してから入力を開始すると、コンボドロップダウンボタンが表示される以外は何も起こりません。最初にF2キーを押さない限り、入力した文字は入力されません。
だからここに私の質問があります:上記の2つのインスタンスでJComboBoxesをJTextFieldsとまったく同じように動作させるために何をする必要がありますか?
なぜ私がやっていることをしているのか尋ねたり、代替案を提案したりしないでください(それは現状であり、この方法で行う必要があります)。はい、問題のすべてのコンポーネントのAPIを読みました。問題は、それがスイングAPIであるということです。