Zaprojektowałem jeden GUI, w którym użyłem jednego JTable, z którego mam zrobić 2 kolumny niewidoczne. Jak mam to zrobić?Jak zrobić kolumny w JTable Invisible dla Swing Java
Odpowiedz
Ustaw min, max i „normalne” width do 0:
jTable.getColumn("ABC").setWidth(0);
jTable.getColumn("ABC").setMinWidth(0);
jTable.getColumn("ABC").setMaxWidth(0);
Drugie podejście jest rozszerzenie TableColumnModel
i zastępują wszelkie metody, aby stworzyć iluzję (dla JTable), że dany model nie robi” t mają te dwie kolumny.
Kiedy więc ukryjesz kolumnę, powinieneś zwrócić mniej, gdy w tabeli pojawi się liczba kolumn, a kiedy prosi o kolumnę X, możesz dodać +1 do indeksu kolumny (w zależności od tego, czy znajduje się po lewej lub prawej stronie ukrytej kolumny) itp.
Pozwól swojemu nowemu modelowi tabeli przesyłać dalej wszystkie wywołania metod (z poprawionymi indeksami itp.) do rzeczywistego modelu kolumny i użyj nowego modelu tabeli w tabeli JTable.
Można by utworzyć podklasę modelu i zastąpić TableModel.getColumnCount
następująco:
int getColumnCount() {
return super.getColumnCount()-2;
}
Ostatnie dwie kolumny nie będzie wówczas wyświetlany w JTable
.
, ale czy mogę pobrać z nich dane? –
tworzysz tylko iluzję, że nie ma tam kolumn, ale są one nadal tam, a zatem powinny być w stanie uzyskać dane nadal – dharga
Ale jak mam je ukryć przed GUI. –
Usuń TableColumn
z TableColumnModel
.
TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn(tcm.getColumn(...));
Jeśli potrzebujesz dostępu do danych, użyj table.getModel().getValueAt(...)
.
Dla bardziej złożonego rozwiązania, które pozwala użytkownikowi ukryć/pokazać kolumny, jak chcą, sprawdzić Table Column Manager.
To jest prawdziwa odpowiednia metoda - ustawienie szerokości na 0 jest fałszywe. W ten sposób nadal masz dane w swoim modelu; po prostu ukrywasz część widoku. – M1EK
Nawet przy powyższym podejściu dane nadal znajdują się w modelu, dlatego można uzyskać do niego dostęp, jak pokazano powyżej. Tak działa MVC. Wszystko, co robimy, to zmiana widoku. Po ustawieniu szerokości na 0, spróbuj tabbować, gdy klikniesz na ukryty słup kolumny, zniknie, dopóki ponownie nie klikniesz. To zmyli użytkowników. – camickr
dziękuję bardzo. Pomogło mi to ......... – Geetanjali
Próbowałem 2 możliwych rozwiązań, które działają, ale dostałem problem z pierwszym rozwiązaniem.
table.removeColumn(table.getColumnModel().getColumn(4));
lub
table.getColumnModel().getColumn(4).setMinWidth(0);
table.getColumnModel().getColumn(4).setMaxWidth(0);
table.getColumnModel().getColumn(4).setWidth(0);
W niedawnej przypadku, 2nd korzystne rozwiązanie, ponieważ dodano TableRowSorter.
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
Podczas korzystania table.removeColumn(table.getColumnModel().getColumn(4))
będzie fizycznie usunąć kolumnę z tabeli/widoku, więc nie można użyć table.getValueAt(row, 4)
- zwraca ArrayIndexOutOfBounds
. Jedynym sposobem uzyskania wartości usuniętej kolumny jest wywołanie table.getModel().getValueAt(table.getSelectedRow(),4)
. Od TableRowSorter sortuje tylko to, co na stole, ale nie dane w DefaultTableModel obiektu, problem jest, gdy pojawi się wartość po sortowania rekordów - będzie pobierać dane z DefaultModelObject, która nie jest posortowana .
Więc użyłem 2. Roztwór następnie wykorzystywane table.getValueAt(table.getSelectedRow(),4);
Jedyny problem widzę z 2nd podejście zostało wymienione przez @camickr: „Kiedy ustawić szerokość 0, spróbuj tabulatorem, gdy trafisz ukryty Kolumna fokusu znika, dopóki nie pojawi się ponownie. To spowoduje dezorientację użytkowników. "
Użyj 'table.getModel(). getValueAt (table.convertRowIndexToModel (row), 4). – xmedeko
Próbowałem ich wszystkich: oni nie pomagają. NAJLEPSZY sposób polega na stworzeniu nowego modelu tabeli bez kolumny, którą chcesz usunąć. Oto jak to zrobić:
table = (DefaultTableModel) <table name>.getModel();
DefaultTableModel table1 = new DefaultTableModel();
Vector v = table.getDataVector();
Vector v1 = newvector(v,<column index you want to delete>);
Vector newvector(Vector v,int j){
Vector v1= new Vector();
try{
Vector v2;
Object[] o = v.toArray();
int i =0;
while(i<o.length){
v2 = (Vector) o[i];
v2.remove(j);
v1.add(v2);
i++;
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null,"Error in newvector \n"+e);
}
return v1;
}
Vector getColumnIdentifiers(int i) {
Vector columnIdentifiers = new Vector();
int j=0;
while(j<i){
columnIdentifiers.add(("c"+(j+1)));
j++;
}
return columnIdentifiers;
}
table1.setDataVector(v1,getColumnIdentifiers((<column count>-1)));
<table name>.setModel(table1);
Najpierw usunąć kolumnę z widoku
table.removeColumn(table.getColumnModel().getColumn(4));
Następnie odzyskać dane z modelu.
Należy zwrócić uwagę, że podczas pobierania danych należy je pobrać z modelu, a nie z tabeli.
Jak usunąć z modelu? – partho
miałem ten sam problem i dlatego używam TableColumnModel
removColumn();
does'not mi pomóc więc użyłem tego
table.getColumnModel().getColumn(0).setWidth(0);
table.getColumnModel().getColumn(0).setMinWidth(0);
table.getColumnModel().getColumn(0).setMaxWidth(0);
i pracował w porządku dla mnie to ukryć kolumnę 0 i nadal w stanie uzyskać wartość od tego
- 1. Java Swing JTable wybierz programowo wiele wierszy
- 2. ukryć kolumnę w JTable
- 3. Zmiana Swing JTable komórkowe Kolory
- 4. Java - Swing - JTable - Ustaw kolor dla zaznaczonego wiersza, ale nie dla komórki
- 5. JTable ukryj i pokaż kolumny
- 6. Jak programowo usunąć zaznaczenie aktualnie wybranego wiersza w JTable (swing)?
- 7. Dynamiczna zmiana tekstu nagłówka kolumny w JTable
- 8. Jak uczynić tło JTable przezroczystym?
- 9. Pobierz ograniczenia układu dla komponentu Java Swing
- 10. Okno wyskakujące w Java Swing
- 11. automatyczne obliczanie szerokości kolumny w JTable
- 12. Jak ustawić kolejność kart w Swing Java?
- 13. Java Swing Edytor tekstu
- 14. Ustaw szerokość kolumny JTable według wartości procentowej
- 15. Układ Java swing
- 16. Java Swing - lokalizowanie temperatury
- 17. Ustawianie wysokości wiersza w JTable w java
- 18. Jak działa funkcja JComponent.paintImmediately() w Java Swing?
- 19. Java Swing JMenu Mnemonic
- 20. Jak zbudować aplikację java swing w intelijidea
- 21. Jak wyświetlić captcha w aplikacji java swing
- 22. Jak odtwarzać wideo w Java Swing?
- 23. Jak dodać mnemoniki w java swing?
- 24. Java Swing JXDatePicker
- 25. Java Swing FlowLayout Wytyczne
- 26. Utrwalanie aplikacji Java Swing
- 27. Powiększ JPanel w Java Swing
- 28. Google Map w JAVA Swing
- 29. usterka grafiki Java Swing?
- 30. Nagłówek kolumny JTable nie jest widoczny
Nie, to nie działa. –
Należy również ustawić min i max width. –
Dlaczego zamówienie jest ważne, próbowałem go najpierw i nie używałem tej samej kolejności, więc nie działa, oec użyłem tej samej kolejności (szerokość, min, max) to działa, więc DLACZEGO? –