JComboBox in JTable immer sichtbar

Status
Nicht offen für weitere Antworten.

Mapara

Mitglied
Hallo!

Ich möchte gern die Combobox in der JTable anzeigen lassen, damit man weiß, dass es sich um eine Combobox handelt. Standardmäßig sieht man sie ja nur, wenn man auf die Zelle klickt!

Marcus
 

André Uhres

Top Contributor
Du brauchst einen TableCellRenderer:
Code:
...
        TableColumn col = table.getColumnModel().getColumn(vColIndex);
        col.setCellRenderer(new MyComboBoxRenderer(values));
...
    public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
        public MyComboBoxRenderer(String[] items) {
            super(items);
        }
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (isSelected) {
                setForeground(table.getSelectionForeground());
                setBackground(table.getSelectionBackground());
            } else {
                setForeground(table.getForeground());
                setBackground(table.getBackground());
            }
            setSelectedItem(value);
            return this;
        }
    }
 

Mapara

Mitglied
Hi!

Danke erstmal für deine Antwort!

Das hatte ich auch versucht, aber irgendwie zeigt die Tabelle die Combobox trotzdem nicht an. ???:L
Ich hab auf die Spalte auch noch einen Editor gesetzt, da ich die gewählten Items in einen Vector schreiben will.

Irgendwie macht das so das gleiche wie vorher?

Vllt. ist auch noch nicht ganz klar geworden was ich meine: :)
Also ich möchte beim Programmstart die Combobox in der Tabelle sehen, ohne das etwas selektiert wird. (Damit der Nutzer weiß, dass sich hinter der Zelle eine Combobox versteckt)

Marcus
 

André Uhres

Top Contributor
Code:
/*
 * ComboDemo.java
 */
package table;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class ComboDemo extends JFrame {
    private JTable table;
    private DefaultTableModel model;
    public ComboDemo() {
        setSize(400,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        table = new JTable();
        model = (DefaultTableModel)table.getModel();
        model.addColumn("A", new Object[]{"item1"});
        model.addColumn("B", new Object[]{"item2"});
        String[] values = new String[]{"item1", "item2", "item3"};
        int vColIndex = 0;
        TableColumn col = table.getColumnModel().getColumn(vColIndex);
        col.setCellEditor(new MyComboBoxEditor(values));
        col.setCellRenderer(new MyComboBoxRenderer(values));
        add(new JScrollPane(table));
    }
    public static void main(final String args[]) {new ComboDemo().setVisible(true);}
}
class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
    public MyComboBoxRenderer(final String[] items) {
        super(items);
    }
    public Component getTableCellRendererComponent(final JTable table, final Object value,
            final boolean isSelected, final boolean hasFocus, final int row, final int column) {
        if (isSelected) {
            setForeground(table.getSelectionForeground());
            setBackground(table.getSelectionBackground());
        } else {
            setForeground(table.getForeground());
            setBackground(table.getBackground());
        }
        setSelectedItem(value);
        return this;
    }
}
class MyComboBoxEditor extends DefaultCellEditor {
    public MyComboBoxEditor(final String[] items) {
        super(new JComboBox(items));
    }
}
 
T

Tolpan

Gast
Hallo

ich habe wie in dem Beispiel oben beschrieben die cellrenderer und editor implementiert und der tabelle übergeben
und es wird auch alles wunderschön gezeichnet.

Allerdings weiß ich nun nicht wie ich per methode Werte in das entsprechende Feld schreiben kann und diese dann auch in der Combobox angezeigt werden.
Wenn ich
Code:
setValueAt(int, int)
verwende legt mir die Tabelle ein Label über die Combobox mit dem value.
Wenn ich im Renderer direkt was reinschreibe wird es nicht sichtbar.

Bitte Helft mir

MfG Tolpan
 

André Uhres

Top Contributor
Tolpan hat gesagt.:
..wie ich per methode Werte in das entsprechende Feld schreiben kann und diese dann auch in der Combobox angezeigt werden..
Code:
TableCellEditor ed = table.getCellEditor(0, 0);
JComboBox box = (JComboBox) ed.getTableCellEditorComponent(table, ed.getCellEditorValue(), true, 0, 0); 
String[] items = {"a", "b", "c", "d", "e"};
box.setModel(new DefaultComboBoxModel(items));
TableCellRenderer renderer = table.getCellRenderer(0, 0);
box = (JComboBox)renderer.getTableCellRendererComponent(table, table.getValueAt(0, 0), true, true, 0, 0);
box.setModel(new DefaultComboBoxModel(items));
table.updateUI();
 
T

Tolpan

Gast
Hi

danke schonmal das hat mich nen schritt weitergebracht

Allerdings steht nun in der gesamten Spalte ein und das selbe
selbst in den Zellen die ich gar nicht angesprochen habe

ich hänge später nochmal etwas code an bin nur leider grade am falschen Rechner


MfG Tolpan
 
T

Tolpan

Gast
Wow

jetzt wo ich endlich verstanden hab was da passiert klappt es

Herzlichen Dank


mfg Tolpan
 

K-Man

Bekanntes Mitglied
Hallo
Ich habe den obigen Code verwendet, um eine ComboBox in eine Tabelle zu integrieren.
Folgende Methode greift bei Änderungen.

Code:
	public void tableChanged(TableModelEvent e)
	{
		System.out.println(((JComboBox)table.getCellRenderer(table.getSelectedRow(), table.getSelectedColumn())).getSelectedItem());
		
	}

Leider wird mir hier nur das vorher selektierte Element der ComboBox ausgegeben. Das Ereignis hinkt also immer um eins zurückt. Wie kann ich das lösen?
 

K-Man

Bekanntes Mitglied
Vielen Dank.
Wie kann ich da aber auf die JComboBox zugreifen oder auf den Button wie in diesem Beispiel?
Mit getCellRenderer komm ich ja auf JComponentCellRenderer, kann da aber nicht auf JComboBox bzw JButton casten...
 

André Uhres

Top Contributor
K-Man hat gesagt.:
..Wie kann ich da aber auf die JComboBox zugreifen oder auf den Button wie in diesem Beispiel?
Mit getCellRenderer komm ich ja auf JComponentCellRenderer, kann da aber nicht auf JComboBox bzw JButton casten...
In actionPerformed vom ActionListener kommst du mit e.getSource() an die Komponente, die die Aktion
ausgelöst hat (also den JButton bzw. die JComboBox). Im Beitrag auf den mein Link zeigt, da steht auch noch unten eine
Fussnote, die erklärt, wie du an die Koordinaten in der JTable rankommst.
 

K-Man

Bekanntes Mitglied
Ich glaube du verstehst mich falsch. Ich möchte zB in einer Methode den Wert aller ComboBoxen in der Tabelle abfragen. Dazu brauch ich zB so ne Art getComponentAt(row, column). Mit der kann ich auf ein beliebiges Feld in der Tabelle zugreifen und dann den selektierten Wert der Combobox abfragen.
 

André Uhres

Top Contributor
Code:
       for (int row = 0; row < table.getRowCount(); row++) {
            for (int column = 0; column < table.getColumnCount(); column++) {
                Object value = table.getValueAt(row, column);
                if(value instanceof JComboBox){
                    JComboBox box = (JComboBox)value;
                    String item = box.getSelectedItem().toString();
                    System.out.println("Value of JComboBox: "+item);
                }
            }
        }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
F Swing JComboBox in JTable AutoComplete + Tab AWT, Swing, JavaFX & SWT 4
M JComboBox Item-Auswahl in JTable AWT, Swing, JavaFX & SWT 2
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
D Swing jTable mit jComboBox in einem Coloumn AWT, Swing, JavaFX & SWT 28
S Einzelne JComboBox in JTable austauschen AWT, Swing, JavaFX & SWT 4
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
C jComboBox in jTable ohne Klick öffnen AWT, Swing, JavaFX & SWT 4
O Swing JComboBox in JTable AWT, Swing, JavaFX & SWT 14
K Swing JComboBox in JTable AWT, Swing, JavaFX & SWT 9
B JComboBox in JTable, Actionlistener AWT, Swing, JavaFX & SWT 10
E Swing JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an AWT, Swing, JavaFX & SWT 5
M Swing jcombobox als jtable-editor: neues Item auswählen AWT, Swing, JavaFX & SWT 4
N jTable mit JComboBox auslesen AWT, Swing, JavaFX & SWT 6
K Swing JTable mit JComboBox AWT, Swing, JavaFX & SWT 10
A JComboBox bei Veränderungen in der JTable mit aktualisieren AWT, Swing, JavaFX & SWT 6
A JComboBox-Zeilen in JTable AWT, Swing, JavaFX & SWT 2
W JComboBox in einer Reihe von JTable AWT, Swing, JavaFX & SWT 7
G Swing JComboBox in JTable beim Aufklappen befüllen AWT, Swing, JavaFX & SWT 3
S JComboBox in JTable wird erst nach klick angezeigt AWT, Swing, JavaFX & SWT 2
O JCombobox in EINER JTable Cell AWT, Swing, JavaFX & SWT 5
G JComboBox und JTable transparent AWT, Swing, JavaFX & SWT 18
D JCombobox in JTable AWT, Swing, JavaFX & SWT 5
J JCombobox in JTable klappt beim ersten Tastendruck zu AWT, Swing, JavaFX & SWT 3
G JTable mit JComboBox als Celleditor, selectedRow falsch! AWT, Swing, JavaFX & SWT 3
A JCombobox in JTable AWT, Swing, JavaFX & SWT 4
S JCbox in Jtable Zelle nur anzeigen , wenn JCombobox ="a AWT, Swing, JavaFX & SWT 3
H JTable und JCombobox ? AWT, Swing, JavaFX & SWT 2
R JComboBox über ein AstractTableModel in eine JTable packen AWT, Swing, JavaFX & SWT 2
S JTable (Scrollpane und ColumnNames) und JComboBox AWT, Swing, JavaFX & SWT 2
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
TRunKX Kann man ne JCOmboBox in eine JTAble einfügen AWT, Swing, JavaFX & SWT 10
D JTable und JComboBox oder CheckboxGroup AWT, Swing, JavaFX & SWT 6
S JComboBox in JTable AWT, Swing, JavaFX & SWT 8
K JTable als Popup in einer JComboBox? AWT, Swing, JavaFX & SWT 3
B Wert einer JCombobox in einer JTable setzen AWT, Swing, JavaFX & SWT 2
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
Esquid If Befehl bei JComboBox AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
D JComboBox Strings aus JTextFields zuordnen AWT, Swing, JavaFX & SWT 2
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
I Editierbare JComboBox, die nur Ganzzahlen als Eingabewerte zulässt AWT, Swing, JavaFX & SWT 3
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
D Swing JCombobox Weiße Leerzeilen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
K Swing JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 4
D Swing "blaues" Element aus JComboBox erhalten AWT, Swing, JavaFX & SWT 6
F JComboBox und Einträge AWT, Swing, JavaFX & SWT 3
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
T JPanelsteuerung mit JComboBox AWT, Swing, JavaFX & SWT 5
N Swing Duplikate im Jcombobox vermeiden AWT, Swing, JavaFX & SWT 15
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
M Alle Schriftarten in JComboBox AWT, Swing, JavaFX & SWT 5
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
Sin137 JComboBox mit Generics AWT, Swing, JavaFX & SWT 14
R JComboBox erweitern AWT, Swing, JavaFX & SWT 5
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
V Editierbare JComboBox AWT, Swing, JavaFX & SWT 2
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
F Swing Jcombobox mit manueller Rückgabe AWT, Swing, JavaFX & SWT 4
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
J JComboBox + ItemListener AWT, Swing, JavaFX & SWT 12
T Swing jComboBox auslesen mit Datenbankanbindung AWT, Swing, JavaFX & SWT 3
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
S JComboBox UTF-8 Codierung zuweisen AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S JComboBox nach auswahl erneuern AWT, Swing, JavaFX & SWT 4
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
F Swing jComboBox auslesen AWT, Swing, JavaFX & SWT 6
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen


Oben