Po utworzeniu komponentu JTable edycja komórek jest domyślnie włączona. Jak mogę uniemożliwić użytkownikowi edycję zawartości JTable?Wyłącz edycję użytkownika w JTable
Odpowiedz
JTable używa obiektu AbstractTableModel. To jest rzecz, którą przekazujesz do konstruktora JTable. Możesz napisać własną AbstractTableModel następująco
public class MyTableModel extends AbstractTableModel {
public boolean isCellEditable(int row, int column){
return false;
}
}
a następnie zainicjować JTable jak
JTable myTable = new JTable(new MyTableModel());
Próbowałem tego kodu, aby uniknąć sytuacji, w której użytkownik może edytować zawartość komórki, która działa. Jednak pozwala to również uniknąć zmiany zawartości komórki przez aplikację, czy istnieje jakieś obejście tego konkretnego scenariusza? – clement
Wygląda na to, że po prostu podanie wartości boolowskiej nie było wystarczające dla projektantów ... – pauluss86
Można utworzyć JTable przy użyciu następującego kodu:
JTable jTable = new JTable() {
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int column) {
return false;
};
};
zasadzie to, co robimy tu unieważniając isCellEditable
i zawsze zwraca false od niego. Spowoduje to utworzenie JTabel non editabe.
Jeśli to wszystko, co robię, nie widzę problemu z używaniem anonimowej klasy. – Chase
to powinna być lepsza odpowiedź. Nie znajduję tutaj niczego złego w używaniu klasy anon. Dodatkowo użytkownik może używać innego 'TableModel' w innej lokalizacji. Awansuj! – instinct
+1 @institute, ponieważ nie ma to wpływu na model tabeli, jest to znacznie lepsza odpowiedź, według mnie. Pytanie: czy serialVersionUID jest naprawdę potrzebny? – Paul
Hi Pracuję dużo na java więc dam ci mój sposób: Istnieje dwie możliwości, pierwsza pod netbeans. Przejdź do dostosowywania kodu i wykonaj go w następujący sposób:
JTArticleJPAddArrticle = new javax.swing.JTable();
JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255));
JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat"
}
){
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
});
jScrollPane8.setViewportView(JTArticleJPAddArrticle);
Moim innym sposobem jest zrobienie instancji modelu tabeli. To jest drugi sposób:
model=new DefaultTableModel(head, 0){
@Override
public boolean isCellEditable(int i, int i1) {
return false; //To change body of generated methods, choose Tools | Templates.
}
};
jtable.setmodel(model);
Ciesz się, że działa dobrze dla mnie. Wszystko, co chcę zrobić, to pomóc wam wyjść, ponieważ wcześniej bardzo mi pomogło.
Oba są w ten sam sposób.Drugi fragment kodu zawiera mniej nieistotnego kodu, co czyni go lepszym rozwiązaniem. –
@MicahStairs w procesie wykonywania, pierwszy jest lepszy, ponieważ klasa zostanie skompilowana łatwo, a druga to nadpisanie, które zajmie trochę więcej czasu, ale w widoku projektu dla programisty drugi jest łatwiejszy do utrzymania kod; –
myTable.setDefaultEditor(Object.class, null);
Może mógłbyś wyjaśnić te prace i wymienić wady? Wygląda na to, że semantyka różni się od poprzednich odpowiedzi - tj. ustawiasz edytor pusty. Być może jest to wolniejsze, ponieważ zapewnienie, że tabela jest edytowalna, wymaga zastosowania dłuższej ścieżki kodu? –
To jest prosta odpowiedź, której szukałem. Może nie być najlepszym osiągnięciem, ale jego prostota jest tego warta. – Cristian
Czy Bogate prosto:
JTable table = new JTable();
table.setEnabled(false);
O JComponent.setEnabled(boolean) to Sayes:
Zestawy czy składnik ten jest włączony. Włączony komponent może reagować na dane wprowadzone przez użytkownika, natomiast komponent, który nie jest włączony, nie może odpowiedzieć na dane wprowadzone przez użytkownika. Niektóre składniki mogą zmieniać swoją reprezentację wizualną, gdy są wyłączone, aby przekazać użytkownikowi informację zwrotną, że nie mogą odbierać danych wejściowych.
Jeśli chodzi o JTable, nie wydaje się, aby w ogóle dostarczył wizualnej informacji zwrotnej. Z dodatkiem możliwości klikania nagłówków kolumn. W mojej implementacji aplikacja może nadal zmieniać zawartość komórek.
Ups. Właśnie zobaczyłem, że użytkownik Siddhu przyszedł z tym samym rozwiązaniem tutaj: http://stackoverflow.com/questions/1990817/how-to-make-a-jtable-non-editable?noredirect=1&lq=1. nie wiem, czy powinienem go tutaj usunąć, czy też go zostawić, ponieważ nie wiem, które pytanie może zostać usunięte jako duplikat. Niestety, noob tutaj: o – brat
Problem polega na tym, że użytkownik nie może zobaczyć, czy dowolny wiersz lub komórka jest zaznaczona, nawet po kliknięciu. Zauważyłem, że użycie 'setDefaultEditor()' jest lepsze niż to, ponieważ zapewnia wizualną informację zwrotną, gdy użytkownik wybierze dowolny wiersz lub komórkę. – anotherGatsby
tm = new javax.swing.table.DefaultTableModel()
{
public Class<?> getColumnClass(int column)
{
switch(column)
{
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return String.class;
case 5:
return String.class;
case 6:
return String.class;
case 7:
return String.class;
case 8:
return String.class;
case 9:
return String.class;
case 10:
return String.class;
case 11:
return Boolean.class;
default:
return String.class;
}
}
@Override
public boolean isCellEditable(int row, int column) {
/* Set the 11th column as editable and rest non-
editable */
if(column==11){
return true;
}else{
//all other columns to false
return false;
}
}
};
table = new javax.swing.JTable(tm);
Proszę [edytuj] (https://stackoverflow.com/posts/49110309/edit) swoją odpowiedź, aby wyjaśnić, dlaczego ten fragment kodu odpowiada na pytanie. –
- 1. JTable, wyłącz kolumna użytkownik przeciągając
- 2. Wyłącz tryb pojedynczego użytkownika
- 3. Jak mogę zachować zdefiniowane przez użytkownika szerokości kolumn w JTable?
- 4. Wyłącz elementy JComboBox w czasie wykonywania
- 5. Przenoszenie wiersza w JTable
- 6. Zapisywanie JTable w Excelu
- 7. Scalanie komórek w JTable
- 8. Umieszczanie JComboBox w JTable
- 9. ukryć kolumnę w JTable
- 10. Jak śledzić indeks wiersza, gdy JTable zostało posortowane przez użytkownika?
- 11. Wybieranie wielu wierszy JTable
- 12. Jak włączyć szybką edycję bezpośrednią w Bloggerze?
- 13. Interactive JTable
- 14. Jak wykonać edycję w miejscu w UITableView?
- 15. programowo ustaw edycję tekstu w systemie Android?
- 16. xamDataTree rozpocznij edycję węzła w kodzie
- 17. cameraOverlayView uniemożliwia edycję z allowsEditing
- 18. Jak dodać JCheckBox w JTable?
- 19. Ustawianie nagłówków kolumn w JTable
- 20. Nieprawidłowy Sortowanie data w JTable
- 21. Wyrównanie wartości komórek w JTable?
- 22. Jak uniemożliwić edycję wpisu tekstowego?
- 23. Wyłącz skrót w argparse
- 24. Jak określić, która komórka w JTable została wybrana?
- 25. Wyłącz UISearchBar
- 26. JTable kolumna obejmująca
- 27. JTable - przeciągnij i upuść
- 28. JTable bez nagłówka
- 29. Słuchacz zmiany wartości JTable
- 30. JTable ze złożonym edytorem
Zobacz [* Jak korzystać z tabel *] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html). – trashgod