Avatar billede tri Nybegynder
04. december 2002 - 08:45 Der er 13 kommentarer og
1 løsning

Swing: JTable

Hvordan disabler jeg at man kan rette i en celle i min tabel.

Man skal kunne markerere en hel række (den kan man også nu), men man må ikke kunne rette i cellerne.

Hvordan?
Avatar billede gybel Nybegynder
04. december 2002 - 09:57 #1
Du kunne benytte:

setSelectionMode(int selectionMode);
Som kan sættes således at man enten kun vælger en eller en række celler.
Avatar billede tri Nybegynder
04. december 2002 - 10:01 #2
gybel :

Hjælper ikke.
Den property kan ikke bruges til at disable editering i en celle!
Avatar billede gybel Nybegynder
04. december 2002 - 10:05 #3
nej men den kan gøre så du ikke kan selecte den enkelte celle
Avatar billede tri Nybegynder
04. december 2002 - 10:06 #4
nej den gør ikke.
Prøv selv!
Avatar billede gybel Nybegynder
04. december 2002 - 10:07 #5
Hvis du benytter denne så kan man heller ikke vælge en celle = ikke rediger en celle

setCellSelectionEnabled(boolean cellSelectionEnabled)
Avatar billede tri Nybegynder
04. december 2002 - 10:13 #6
har du testet det?

Dette virker nemlig ikke:

JTable table = new JTable(Rows, Columns);
        table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        table.setCellSelectionEnabled(false);
        panel3.add(table);

Man kan stadig redigerer i en celle!
Avatar billede gybel Nybegynder
04. december 2002 - 10:22 #7
Jep det er rigtig nok håbede lige at man kunne lave en smut vej.
Avatar billede tri Nybegynder
04. december 2002 - 11:31 #8
jeg har fundet ud af at man skal bruge 'AbstractTableModel'

Men så har man ikke alle JTable's metoder til rådighed....
Avatar billede gybel Nybegynder
04. december 2002 - 12:27 #9
Jeg tror også at du kan anvende TableCellEditor og lade den lytte på om der er nogen der forsøger at ændre i tablen, dette kan så stoppe her.
Avatar billede Slettet bruger
06. december 2002 - 14:40 #10
Så vidt jeg kan se går spørgsmålet på redigering af celler. Der kan ikke løses med SelectionMove.

JTable spørger sin TableModel, hvis den vil vide om en celle må redigeres. Default benytter JTable en DefaultTableModel som model, men der er en constructor der tager en TableModel. Hvis den benyttes kan du lave din egen implementation af TableModel (opnås nemmest ved at overskrive DefaultTableModel, da du sikkert ønsker at resten af funktionaliteten skal være som normalt) sådan her f.eks:

...

// Imports fjernet for at spare plads!
public class JTableTester {
    public static void main(String[] args) {

        final JFrame frame = new JFrame(JTableTester.class.getName());
        Object[] columns = new Object[] {"K1", "K2", "K3" };
        String[][] data = new String[][] { { "Data1", "Data2", "Data" }, {
                "Data4", "Data5", "Data6" }
        };

        TableModel myTableModel = new DefaultTableModel(data, null) {
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        JTable myTable = new JTable(myTableModel);
       
        frame.getContentPane().add(myTable);
        frame.setVisible(true);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
...

I Ovenstående eksempel har jeg valgt at gøre hele tabellen "read only" for at gøre eksemplet somplere, men hvis det er enkelte kolonner (eller for den sags skyld rækker eller celler) der ikke må redigeres, kan mere kompleks kode til føjes til metoden "isCellEditable(...)".

Hygge
/Dennis
Avatar billede Slettet bruger
06. december 2002 - 14:40 #11
Ups... Jeg gjorde det igen... Ovenståede er et forsøg på et svar!

(Denne er her kun for at sikre at spørgeren bliver informeret om at der er svaret)
Avatar billede tri Nybegynder
06. december 2002 - 14:58 #12
mimerdk :

Hvad så hvis jeg ønsker at bruge alle de metoder og properties som ligger på JTable?

Kan man lave sin egen "JTable" ved at nedarve fra java's JTable, og i sin egen "JTable" overskriver man samtidig alle java's "DefaultTableModel" metoder?
Avatar billede Slettet bruger
09. december 2002 - 11:18 #13
Hej Tri...

Jeg er ikke helt sikker på hvad du mener, men det er sjældent nødvendigt at nedarve fra JTable selv. Ofte vil man lave overskrivninger af TableModel og egne Renderere og Editore, men JTable skal faktisk bare opfattes som Linen der holder det hele sammen.

I den overskrivning jeg lavede ovenfor er det faktisk KUN metoden isCellEditable(...) der er overskrevet, så resten fungerer fuldstændig som normalt.

Jeg synes du skal kigge på dette link, da det faktisk beskriver hvordan JTable (og dens "samarbejdspartnere") fungerer:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Hygge
/Dennis
Avatar billede tri Nybegynder
10. december 2002 - 10:17 #14
ok.
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester