2010-05-25 25 views
8

Wstęp: Jestem okropny z Javą, a gorzej z komponentami Java.Jak sprawić, by kolumna JTable zawierała pola wyboru?

Znalazłem kilka różnych tutoriali na temat dodawania przycisków do tabel, jednak zmagam się z dodawaniem pól wyboru. Potrzebuję kolumny, która rysuje pole tekstowe zaznaczone domyślnie (mechanizm renderujący komórki, który wydaje mi się, że to obsługuje), następnie kliknięcie pola wyboru, odznacza pole, przerysowuje wspomniane pole i wystrzeliwuje zdarzenie gdzieś, co mogę śledzić.

obecnie mam niestandardowego mechanizmu renderującego:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer { 
public GraphButtonCellRenderer() { 
} 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    if(isSelected) 
     setSelected(true); 
    else 
     setSelected(false); 
    setMargin(new Insets(0, 16, 0, 0)); 
    setIconTextGap(0); 

    setBackground(new Color(255,255,255,0)); 
    return this; 
}} 

który obecnie obsługuje rysunek pole wyboru, ale tylko kleszcze i unticks pole jest zaznaczone, że jeśli rząd. Ale nie wiem, jak sobie poradzić z tymi wydarzeniami. Naprawdę, o co pytam, jest prawdopodobnie link do dobrego tutoriala o tym, jak dodawać pola wyboru do JTable. Każda pomoc jest mile widziana :)

Odpowiedz

23

Nie ma potrzeby tworzenia własnego renderera tabel. Here's a simpler example. Wystarczy utworzyć niestandardowy model stołu i dla danej kolumny zwrócić Boolean klasy dla:

public Class getColumnClass(int column) 

Jeśli chcesz kolumna być edytowalne, return true dla

public boolean isCellEditable(int row, int column) 

JTable dba o świadczenie dla ty.

Another example is here.

+0

+1 Dobry punkt; prostsze może wystarczyć. Samouczek opisuje kilka domyślnych renderów dla określonych klas. – trashgod

+0

Zaakceptowany. Dziękuję bardzo za linki, są one na tyle proste, że mogę śledzić/zintegrować się z moim bieżącym projektem – theraven

4

Oto prosty raczej opracować example użyciu TableCellRenderer i TableCellEditor. Zobacz także, Concepts: Editors and Renderers.

Dodatek: @Jay Pytanie Askren jest dobrze przyjęte. Domyślny renderer dla Boolean.class, jak opisano w samouczku, może być wszystkim, czego potrzebujesz.

+0

Dziękuję. Nie natknąłem się na ten konkretny przykład. Tyle rzeczy się dzieje ... dam mu pęknięcie – theraven

3

Najprostszym rozwiązaniem jest użycie DefaultTableModel i użyć operacji przedmiot wartości.

+0

tak, to prawda @Peter, Ale czy moglibyśmy ulepszyć więcej poprzez dodanie wartości (ID) do tego pola wyboru, jeśli chcemy PRAWDA wartość stanie się wartością identyfikatora, a wartość FAŁSZ nadal będzie równa FAŁSZ? – gumuruh

5

Jak Peter powiedzieć, że łatwo za pomocą rozszerzonego klasy DefaultTableModel, ex:

class NewTableModel extends DefaultTableModel{ 
     public Class<?> getColumnClass(int columnIndex) { 
      return getValueAt(0, columnIndex).getClass(); 
     } 
    } 
-5

W Swing projektant zestawu typu kolumny do boolean

+1

to rozwiązanie zakłada, że ​​OP używa konstruktora UI jakiegoś typu –