JTable のヘッダーの Label の下に JTextfield を作成する TableHeader レンダラーを作成しました。私が今得た問題は、ヘッダーのこの JTextfield へのフォーカス/アクセスが得られないことです。
TableHeader レンダラーはコンポーネントのみを描画し、フォーカスなどの残りは行わないことがわかりました。
コードベースでアクセスできるように、ヘッダーに設定する JTextfield の配列を作成しようとしました。残念ながらうまくいかなかったので、ヘッダーでこの JTextField にアクセスできるかどうか、またこれを行う最善の方法は何かと考えていました。
テーブルヘッダー レンダラー:
public class TextFieldTableHeaderRenderer extends AbstractCellEditor implements TableCellRenderer {
private MyPanel component;
public TextFieldTableHeaderRenderer(){
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
component = new MyPanel(column);
((MyPanel)component).setLabelText(value.toString());
return component;
}
@Override
public Object getCellEditorValue() {
return ((MyPanel)component).getTextField();
}
マイパネル:
public class MyPanel extends JPanel {
private javax.swing.JLabel label;
private javax.swing.JTextField textField;
public MyPanel(int column) {
super();
setLayout(new java.awt.BorderLayout());
label = new javax.swing.JLabel();
textField = new javax.swing.JTextField();
setBorder(javax.swing.BorderFactory.createEtchedBorder());
label.setHorizontalAlignment(SwingConstants.CENTER);
//textField.setText("Column "+column);
add(textField, java.awt.BorderLayout.PAGE_END);
add(label, java.awt.BorderLayout.CENTER);
}
public void setLabelText( String text ){
label.setText(text);
}
public void setTextFieldText(String text){
getTextField().setText(text);
}
public javax.swing.JTextField getTextField() {
return textField;
}
/**
* @param textField the textField to set
*/
public void setTextField(javax.swing.JTextField textField) {
this.textField = textField;
}
ヘッダーにインストール:
for( int i=0; i < this.getxColumnModel().getColumnCount(); i++){
this.getxColumnModel().getColumn(i, true).setHeaderRenderer( new TextFieldTableHeaderRenderer() );
}
i-net の「EditableHeader」の例を使用しようとしましたが、ヘッダーをクリックすると新しい JTextfield が作成されます。
ユーザーが JTextfield にフォーカスし、テキストを入力すると、列がフィルター処理されることを確認したいと思います。
フィルタリングは問題になりません。私はすでにそれを行っているからです。
うまくいけば、私はあなたたち/女の子に明確であり、あなたの解決策を聞くのが大好きです.