Avatar billede hangaard Nybegynder
18. maj 2005 - 14:55 Der er 5 kommentarer og
1 løsning

CellEditor på individuelle tabel-celler

Hej kloge hoveder!

Jeg skal kunne bruge forskellige CellEditor's på mine celler, da de hver skal ha' en Combobox med deres egne værdisæt.

Hvis jeg kunne ha' brugt den samme CellEditor på en hel kolonne kunne jeg ha' brugt TableColumn.setCellEditor(...), og troede at der ville findes en tilsvarende TableCell hvorpå jeg kunne ha' gjort det samme, men nej - TableCell findes ikke.

Er her nogen som kan fortælle mig hvordan det gøres eller henvise til et eksempel?


Hilsen
hangaard
Avatar billede _carsten Nybegynder
18. maj 2005 - 19:05 #1
Du laver din egen klasse som extender JTable, her overrider du getCellEditor() returnerer det du nu ønsker - har lavet et eksempel så simpelt som jeg kunne.

Det er i den sidste kolonne det sker.



import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;


public class Different_TableCell_Editor extends javax.swing.JFrame {
   
    public Different_TableCell_Editor() {
        initComponents();
    }
   
    private void initComponents() {
        scroll = new javax.swing.JScrollPane();
        spec_table = new Special_Table_Editor();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        spec_table.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        scroll.setViewportView(spec_table);

        getContentPane().add(scroll, java.awt.BorderLayout.CENTER);

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Different_TableCell_Editor().setVisible(true);
            }
        });
    }

    private javax.swing.JScrollPane scroll;
    private Special_Table_Editor spec_table; 
}






class Special_Table_Editor extends JTable{
   
    public Special_Table_Editor() {
        super();
    }
   
    public TableCellEditor getCellEditor(int row, int column){
        if(row == 0 && column == 3)
            return new DefaultCellEditor(new JComboBox(ar_1));
        if(row == 1 && column == 3)
            return new DefaultCellEditor(new JComboBox(ar_2));
        if(row == 2 && column == 3)
            return new DefaultCellEditor(new JComboBox(ar_3));
        if(row == 3 && column == 3)
            return new DefaultCellEditor(new JComboBox(ar_4));
       
        return super.getCellEditor(row, column);
    }
   
    private String[] ar_1 = new String[]{"Abe", "Hund", "Kat"};
    private String[] ar_2 = new String[]{"Sten", "Grus", "Sand"};
    private String[] ar_3 = new String[]{"Øl", "Vand", "Vin"};
    private String[] ar_4 = new String[]{"10", "100", "1000"};
}
Avatar billede hangaard Nybegynder
18. maj 2005 - 19:25 #2
Super!

Tusind tak, Carsten.

Dejlig simpelt eksempel.

Hvis du vil ha' dine point, må du SVARe.

Mvh.
hangaard
Avatar billede _carsten Nybegynder
18. maj 2005 - 19:42 #3
Oki !
Avatar billede _carsten Nybegynder
31. maj 2005 - 21:40 #4
Mangler vi ikke nogel point her ??
Avatar billede hangaard Nybegynder
22. juni 2005 - 17:48 #5
Sorry!
Avatar billede _carsten Nybegynder
22. juni 2005 - 20:48 #6
No problemo!
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