Доступ к JTextField в JTableHeader

Я сделал рендерер TableHeader, который создаст поле JText под меткой заголовка в JTable. Проблема, которую я получил сейчас, я никогда не получаю фокус / доступ к этому JTextfield в заголовке.

Я обнаружил, что средство визуализации TableHeader только рисует компонент, а не делает остальное, как фокус и прочее.

Я попытался сделать массив JTextfield, который будет установлен в заголовке, чтобы я мог получить к ним доступ на основе кода. Не повезло, что не тренировки, мне было интересно, если это возможно, чтобы получить доступ к этому JTextField в заголовке и каков лучший способ сделать это.

Рендерер Tableheader:

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(); 
}

MyPanel:

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() );
        }

Я должен попытаться использоватьEditableHeader» пример из i-net, но он создает новое поле JText при нажатии на заголовок.

Мне нравится видеть, что пользователь получает фокус на поле JText, вводит текст, а затем фильтрует столбец.

Фильтрация не будет проблемой, потому что я уже сделал это.

Надеюсь, я вам понятен, ребята / девушки, и люблю услышать ваше решение

Ответы на вопрос(2)

Ваш ответ на вопрос