Dostęp do JTextField w JTableHeader
Zrobiłem renderera TableHeader, który utworzy pole JTextfield pod etykietą nagłówka w JTable. Problem, który dostałem teraz, nigdy nie uzyskałem ostrości / dostępu do tego JTextfield w nagłówku.
Dowiedziałem się, że mechanizm renderujący TableHeader rysuje tylko komponent i nie robi reszty, jak fokus i inne.
Próbowałem stworzyć tablicę JTextfield, która ustawi się w nagłówku, dzięki czemu będę mógł uzyskać do nich dostęp na podstawie kodu. Pechowy, że nie ćwiczyłem, zastanawiałem się, czy możliwe jest uzyskanie dostępu do tego JTextField w nagłówku i jaki jest najlepszy sposób, aby to zrobić.
Moduł renderujący dla tabel:
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;
}
Zainstaluj w nagłówku:
for( int i=0; i < this.getxColumnModel().getColumnCount(); i++){
this.getxColumnModel().getColumn(i, true).setHeaderRenderer( new TextFieldTableHeaderRenderer() );
}
Próbowałem użyć przykładu „EditableHeader” z i-net, ale po kliknięciu nagłówka tworzy nowe pole JTextfield.
Lubię widzieć, że użytkownik skupia się na polu JText, wprowadza tekst, a następnie filtruje kolumnę.
Filtrowanie nie będzie problemem, ponieważ już to zrobiłem.
Mam nadzieję, że zrozumiecie was, chłopaki / dziewczęta i uwielbiam słyszeć, jak to robicie