Avatar billede clone Nybegynder
14. februar 2001 - 14:31 Der er 6 kommentarer og
1 løsning

JTable spørgsmål

Kan det lade sig gøre at lave en JTabel tabel med BÅDE JComboBox- og JCheckBox-componenter i SAMME kolonne?!
Jeg ved godt hvordan man laver en tabel med samme type componenter i hele kolonnen, men hvordan foregår det, når der er flere forskellige?
Et eksempel ville være herligt!!!
Avatar billede mpultz Nybegynder
14. februar 2001 - 16:23 #1
Override getTableCellEditorComponent fra DefaultCellEditor, få den fra din tabel med getCellEditor(). Gør f.eks. følgende.

public Component getTableCellEditorComponet(JTable table, Object value, boolean isSelected, int row, int column)
{
  Object obj = table.getValueAt(row, column);
  JComponent editorComponent; 
  if (obj instanceof MyClassA)
  {
    JComboBox cb = new JComboBox();
    // Indsæt i cb
    editorComponent = cb;
  } 
  else  // instance of MyClassB
  { 
    editorComponent = new JCheckBox();
  }
  return editorComponent;
}

Hvis du prøver at redigerer en celle i din tabel så fremkommer der en JComboBox hvis indholdet er af typen MyClassA, ellers en JCheckbox.
Avatar billede clone Nybegynder
16. februar 2001 - 10:13 #2
Jeg har lige et spørgsmål til den første linie du skriver:
\"Override getTableCellEditorComponent fra DefaultCellEditor, få den fra din tabel med getCellEditor().\"

Hvordan gør jeg det?
Jeg har prøvet at lave en klasse som nedarver fra DefaultCellEditor, men det kunne jeg ikke få til at virke.
Avatar billede mpultz Nybegynder
21. februar 2001 - 16:26 #3
public class MyTableCellEditor extends DefaultCellEditor
{
  // Indsæt her ovenstående def. af getTableCellEditorComponent
}

Under initialisering af dit problem gør så følgende:

MyTableCellEditor tce = new MyTableCellEditor();
JTable table = new JTable();
...
table.setCellEditor(tce);

Når du så klikker på en celle i din tabel så bliver getTableCellEditorComponent() kaldt for at returnere editeringskomponenten som skal bruges for den pågældende celle.

Håber det hjælper.
Avatar billede clone Nybegynder
22. februar 2001 - 09:46 #4
Jeg kan ikke få lov til at nedarve fra DefaultCellEditor. Får følgende meddelelse:
\"constructor DefaultCellEditor() not found in class javax.swing.DefaultCellEditor at line 893, column 9\"
Hvordan fixer man lige den?

Avatar billede clone Nybegynder
22. februar 2001 - 10:03 #5
Jeg prøvede lige at indsætte følgende constructorer i klassen, og det så umiddelbart ud til at virke:

public class MyTableCellEditor extends DefaultCellEditor
{
    public MyTableCellEditor(JComboBox comboBox) {
        super(comboBox);
    }
    public MyTableCellEditor(JTextField textField) {
        super(textField);
    }
    public MyTableCellEditor(JCheckBox checkBox) {
        super(checkBox);
    }
}

Tusind tak for hjælpen. Du er en helt. Det betyder meget for mig at få det skidt til at virke. Der står meget på spil!
Jeg ser lige om det spiller... hvis ikke, så håber jeg du stadig har tålmodighed til at give en hånd.
Tak igen.
Avatar billede clone Nybegynder
22. februar 2001 - 11:48 #6
Ja, så er den gal igen!
Følgende: \"MyTableCellEditor tce = new MyTableCellEditor();\" kan jeg ikke få til at virke, da jeg ikke kan oprette constructoren MyTableCellEditor().
Det er virkelig underligt. Har du selv prøvet om det virker?
Jeg mister mit job hvis ikke jeg får det til at virke i dag.
Avatar billede mpultz Nybegynder
22. februar 2001 - 17:15 #7
Grunden til at du ikke kan oprette en MyTableCellEditor med new MyTableCellEditor() er at du ingen default konstruktør har. Indsæt følgende eller brug en af de andre konstruktører som du har lavet. Objektet som gives med til konstruktøren for DefaultCellEditor er editeringskomponenten.

public MyTableCellEditor()
{
  super(new JTextField());
}

Tesktfeltet som der gives videre kan du få fat på i MyTableCellEditor ved super.editorComponent. Du kan med fordel bruge denne i din impl. af getTableCellEditorComponent() så der ikke oprettes nye instanser ved hver editering. Du kan f.eks. have en liste af dine forskellige editeringskomponenter. Se iøvrigt API\'et for DefaultCellEditor.
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