Avatar billede backupmand Nybegynder
30. november 2003 - 22:22 Der er 9 kommentarer og
1 løsning

TableCellRenderer virker ikke, hvorfor?

I mit program, Ved tryk på en ekstern knap kommer en JTable til syne med 2 kolonner.
Den første kolonne indeholder JCheckBoxes, den anden kolonne, clickable text.

Når knappen trykkes kommer JTablen frem, men man kan ikke se nogle checkboxes...

Det jeg gør, er at jeg laver en ny JTable ok placerer en custom TableModel inden i den:

MinTableModel minModel=new MinTableModel();
JTable minTable=ew JTable(minModel);

Dernæst putter jeg tablen ind i en ScrollPane og placerer denne pane i mit vindue
og tilfører panen mit panel, så man kan se skidtet:

JScrollPane minPane=new JScrollPane(minTable);
minPane.setBounds(440,120,170,220);   
mitPanel.add(minPane); // mit panel er erklæret tidligere i klassen

Så tilfører jeg den data der skal i min table

for (int i=0;i<r.size;i++) // r er bare en Vector med data i, har variabel størrelse
    minModel.addTableElement(new TableElement("",(String)r.get(i)));

addTableElement er en custom metode i min min minModel klasse.

Så sætter jeg søjle 1 til at rendere min checkboxes:

minTable.getColumnModel().getColumn(0).setCellRenderer(new CheckBoxRenderer());   

Hvor CheckBoxRenderer er flg klasse:

class CheckBoxRenderer extends DefaultTableCellRenderer
{
    public CheckBoxRenderer()
    {
   
    }
   
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
    setEnabled(table.isEnabled());   
    setText(value.toString());   
    return this;
    }   
  }

Men i kolonne 1 kan jeg ikke se nogle CheckBoxes ... ved nogen hvorfor?

Tak
Avatar billede conrad Nybegynder
30. november 2003 - 23:31 #1
Skal det ikke være CheckBoxRenderer extends JCheckBox implements TableCellRenderer?
Avatar billede conrad Nybegynder
30. november 2003 - 23:35 #2
Prøv lige at se om det er nødvendigt at have renderer på når det er boolske værdier der er i tabellen. Jeg mener den kan finde ud af at rendere dem selv.
De skal vis nok laves til objekter først med new Boolean(boolvalue)
Avatar billede backupmand Nybegynder
30. november 2003 - 23:37 #3
DefaultTableCellRenderer er en klasse, så det er extends, mens TableCellRenderer er et interface og så er det implements ... men jeg prøver lige TableCellRenderer og lige noget andet, vender lige tilbage ... jeg forsøger TableCellRenderer den lyder ret logisk
Avatar billede backupmand Nybegynder
30. november 2003 - 23:47 #4
Hvis jeg forsøger mig med new Boolean kager den i TableModel metoden
public Class getColumnClass(int c) {
      return getValueAt(0, c).getClass();
  }
med en nullpointerexception
Avatar billede conrad Nybegynder
01. december 2003 - 00:13 #5
Kan du få

minTable.getColumnModel().getColumn(0).setCellRenderer(mintable.getDefaultRenderer(Boolean.class));

Til at virke?
Avatar billede conrad Nybegynder
01. december 2003 - 00:36 #6
Her er et eksemple der måske kan hjælpe dig lidt. Jeg takker af for i aften - go nat :)

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class BoolTableExample extends JFrame {

    private    JPanel        topPanel;
    private    JTable        table;
    private    JScrollPane scrollPane;
    private DefaultTableModel tmodel;
    public BoolTableExample() {

        setTitle( "BoolTableExample eksempel" );
        setSize( 300, 200 );
        setBackground( Color.gray );

        topPanel = new JPanel();
        topPanel.setLayout( new BorderLayout() );
        getContentPane().add( topPanel );

        tmodel = new DefaultTableModel();
        Boolean[] bools = { new Boolean(true),new Boolean(true),new Boolean(false)};
        tmodel.addColumn("Bools", bools);
        table = new JTable(tmodel);
        table.getColumnModel().getColumn(0).setCellRenderer(table.getDefaultRenderer(Boolean.class));
        table.getColumnModel().getColumn(0).setCellEditor(table.getDefaultEditor(Boolean.class));

        scrollPane = new JScrollPane( table );
        topPanel.add( scrollPane, BorderLayout.CENTER );
    }


    public static void main( String args[] ) {
        BoolTableExample mainFrame    = new BoolTableExample();
        mainFrame.setVisible( true );
    }
}
Avatar billede backupmand Nybegynder
01. december 2003 - 00:37 #7
Det er jeg også lige ved .... tak!
Avatar billede backupmand Nybegynder
01. december 2003 - 01:54 #8
Tak det virker nu
Avatar billede conrad Nybegynder
01. december 2003 - 10:09 #9
et svar ?
Avatar billede backupmand Nybegynder
16. december 2003 - 01:43 #10
undskyld der
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