/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
JButtons i JTables
Fra : Allan Schmidt


Dato : 01-05-01 09:50

Hej gruppe...

Jeg har en JTable hvor jeg gerne vil have den første kolonne til at bestå af
JButtons, eller andet jeg kan bruge som knapper.

Alt hjælp er meget velkommen.

Allan



 
 
Peter Lind (01-05-2001)
Kommentar
Fra : Peter Lind


Dato : 01-05-01 12:11


"Allan Schmidt" <AS8009@ehs.dk> wrote in message
news:3aee78b6@news.ehs.dk...
>
> Jeg har en JTable hvor jeg gerne vil have den første kolonne til at bestå
af
> JButtons, eller andet jeg kan bruge som knapper.

Hejsa

Det første du skal gøre er at lave din table-model, så den returnerer
JButton objekter for den første kolonne. Det kan sikkert gøres ved at lave
en udgave af DefaultTableModel, men jeg foretrækker efterhånden at lave
TableModellen helt fra bunden i en klasse for sig.

Hvis du så prøver at køre dit program, så vil der blot stå
javax.swing.JButton@ altmuligt i den første kolonne. Og det er jo ikke helt
nok.

Derfor skal der tilføjes en TableCellRenderer til tabellen. Den skal sættes
op så den viser en JButton component, når den støder på et JButton objekt i
tabellen.
Det vil dog kun gøre at knapperne kan vises - man kan ikke trykke på dem -
for at gøre det muligt skal man tilføje en TableCellEditor, der ligeledes
skal vise en JButton.

Se lidt flere forklaringer i tutorialen:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Og iøvrigt så vil jeg varmt anbefale bogen: Core Swing, Advanced
Programming, skrevet af Kim Topley. Som titlen antyder så er den ret
avanceret, men går blandt ind og forklarer alle disse mystiske ting med
tabeller og deres renderes og editors.

mvh
Peter Lind



Allan Schmidt (01-05-2001)
Kommentar
Fra : Allan Schmidt


Dato : 01-05-01 13:06


>en masse forklarende tekst.

Ok, det vil jeg prøve... Jeg har allerede lavet min egen Tablemodel over
AbstractTableModel, og min egen TableCellRenderer over DefaultCellRenderer,
da jeg kører med forskellig farver linier baseret på dataene i dem.

Mange tak for hjælpen... jeg håber jeg kan få det til at virke.

Allan



Allan Schmidt (02-05-2001)
Kommentar
Fra : Allan Schmidt


Dato : 02-05-01 11:42

> Derfor skal der tilføjes en TableCellRenderer til tabellen. Den skal
sættes
> op så den viser en JButton component, når den støder på et JButton objekt
i
> tabellen.
> Det vil dog kun gøre at knapperne kan vises - man kan ikke trykke på dem -
> for at gøre det muligt skal man tilføje en TableCellEditor, der ligeledes
> skal vise en JButton.

Jeg kan få den til at vise knapper, men der sker intet når jeg trykker på
dem.
Hvis jeg dobbeltklikker på dem kan jeg editere deres toString() værdi som om
det bare var tekst der var i feltet...
Hvad gør jeg galt??

Her er det jeg har forsøgt:

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



public class ButtonCellRenderer extends JButton implements TableCellRenderer
{
public ButtonCellRenderer()
{
super();
}
public Component getTableCellRendererComponent(JTable table, Object
value,
boolean isSelected, boolean hasFocus,
int row, int column)
{
return this;
}
class ButtonEditor extends DefaultCellEditor
{
public ButtonEditor(JButton b)
{
super(new JCheckBox());
editorComponent = b;
setClickCountToStart(2);

b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Så skete der noget");

}
});
}
public Object getCellEditorValue()
{
return editorComponent;
}
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column)
{
((JButton)editorComponent).setText(value.toString());
return editorComponent;
}
}
}



Allan Schmidt (02-05-2001)
Kommentar
Fra : Allan Schmidt


Dato : 02-05-01 11:44

Jeg implementerer det selvfølgelig også på tabellen:

jobTable.setDefaultRenderer(JButton.class, new ButtonCellRenderer());
setUpButtonEditor(jobTable);

Allan



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste