Swing JComboBox in JTable

ocean.driver

Mitglied
Hallo,

Ich habe ein Tabellenmodell was in bestimmten Spalten eine ArrayList zurück gibt. Jetzt wollte ich mir dafür einen ListCellRenderer anlegen.

Java:
this.jt_MediaFileTable.setDefaultRenderer(ArrayList.class,new ListCellRenderer());


und hab dazu den ListCellRenderer implementiert:

Java:
package tableComponents;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

import java.util.ArrayList;

public class ListCellRenderer implements TableCellRenderer {

JComboBox combobox = new JComboBox();
	
	public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, 
			final boolean hasFocus, final int row, final int column) 
	{
		
		if (value instanceof ArrayList)
			for(Object o: (ArrayList)value)
				combobox.addItem(o);

		return combobox;
	}

	
}

Wo ist mein Denkfehler?was muss ich ändern?Danke schon einmal.
 

ocean.driver

Mitglied
Hi André Uhres,

Aber das bezieht sich doch nur auf eine spezielle Spalte?Ich hatte vor für alle Spalten die eine ArrayList zurück geben diese so anzuzeigen. Editieren ist auch an dieser Stelle nicht notwendig.

Gibt es diese Möglichkeit auch über "setDefaultRenderer"?

gruß
 

ocean.driver

Mitglied
Ich habe in einer Spalte statt eines einzelnen Wertes eine Liste von Werten (in einer ArrayList) die ich aufzeigen will.

Ich bekomm beispielsweise sowas von der Tabelle:

col_01 --> Integer
col_02 --> String
col_03 --> Date
col_04 --> ArrayList (soll per combobox dargestellt werden)
 

André Uhres

Top Contributor
In einer Spalte ist gewöhnlich eine Liste von Werten, oder meinst du in einer Zelle?

Eine Liste kann man auch nicht durch eine Combobox in einer JTable darstellen. Eine Combobox ist einfach nur ein Label mit einem einzigen Wert, den man verändern kann, indem man aus einer Popupliste einen neuen Wert auswählt. Vom Standpunkt der JTable aus gesehen ist die Combobox also einfach nur ein Editor.

Gruß,
André
 
Zuletzt bearbeitet:

ocean.driver

Mitglied
Achso, dann hatte ich das etwas falsch verstanden.

Also:

Ich habe eine Liste von Filmen. Jetzt habe ich eine Spalte in der ich die verfügbaren Sprachen angeben will. Jetzt kann es zum Beispiel sein, dass ein Film die Sprachen: deutsch, englisch und Somali hat. Wie kann ich diese Liste am besten darstellen ohne einfach eine komma-seperierte Liste zu haben?
 

ocean.driver

Mitglied
Gibt es ne Bibliothek dafür?

Ich glaube ich würde lieber bei einer textuellen Ausgabe bleiben. Was gibt es da für Möglichkeiten?
Ist denn die Combox garnicht möglich? Die dürfe ja dann quasi nicht editable sein.
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Versuch's mal so:
Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableTest extends JFrame {
    private JTable table;
    public TableTest() {
        initComponents();
        TableColumn column = table.getColumn("Sprachen");
        column.setCellRenderer(new MyRenderer());
    }
    private void initComponents() {
        table = new JTable();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        table.setModel(new DefaultTableModel(
                new Object[][]{
                    {null, "uk,de,so"},
                    {null, "uk,de"}
                },
                new String[]{
                    "Title 1", "Sprachen"
                }) {
            Class[] types = new Class[]{
                String.class, String.class
            };
            @Override
            public Class getColumnClass(int columnIndex) {
                return types[columnIndex];
            }
        });
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
        pack();
    }
    public static void main(final String... args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TableTest().setVisible(true);
            }
        });
    }
}
class MyRenderer extends DefaultTableCellRenderer {
    private Object value;
    private JTable table;
    private int row;
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JLabel c = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        this.value = value;
        this.table = table;
        this.row = row;
        c.setText("");
        return c;
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (value != null) {
            String[] split = value.toString().split(",");
            int x1 = 0;
            int rowHeight = table.getRowHeight(row);
            for (String string : split) {
                g.drawString(string, x1 + 3, rowHeight - 3);
                x1 += 20;
                g.drawLine(x1, 0, x1, rowHeight);
            }
        }
    }
}
 
D

Dow Jones

Gast
Ist denn die Combox garnicht möglich? Die dürfe ja dann quasi nicht editable sein.
Naja, dafür gibt es ja die Methode JComboBox.setEditable(false). :)
Was für Probleme macht dein TableCellRenderer denn? Schaut mir eigentlich richtig aus. Abgesehen davon, das du vor dem hinzufügen der Sprachen des aktuellen Films vielleicht noch die Sprachen des vorhergehen Filmes aus der Combox löschen möchtest.
 

ocean.driver

Mitglied
Danke erstmal!

Kannst du mir auch genau erklären, was dort passiert?Ich möchte ungern einfach kopieren.


Naja, dafür gibt es ja die Methode JComboBox.setEditable(false). :)
Was für Probleme macht dein TableCellRenderer denn? Schaut mir eigentlich richtig aus. Abgesehen davon, das du vor dem hinzufügen der Sprachen des aktuellen Films vielleicht noch die Sprachen des vorhergehen Filmes aus der Combox löschen möchtest.


Es passiert einfach nix wenn ich auf die Combobox klicke. Muss ich dazu vieleicht noch nen onClick-Event bauen?
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Eine Combobox ist ja, im Sinne des Erfinders, nur dafür gedacht, einen einzigen Wert aus einer Liste von möglichen Werten auszuwählen. Das ist offenbar bei dir nicht das Ziel. Somit wäre die Verwendung einer Combobox in deinem Fall eine Zweckentfremdung und für den uneingeweihten Benutzer irritierend.

Wenn du unbedingt einen Popup haben willst, dann würde ich eher einen Tooltip vorschlagen.

Hier noch ein paar Erläuterungen zu meinem obigen Quellcode:
in der Klasse "MyRenderer" wird eine Referenz auf den Zellenwert (z.B. den Wert "uk,de,so") mit Hilfe der Methode "getTableCellRendererComponent" als Instanzvariable gespeichert (in der Variable "this.value"). Auf diese Weise können wir in "paintComponent" den Wert bequem so darstellen, wie wir es wünschen.

In der Methode "getTableCellRendererComponent" wird außerdem der Standardlabeltext mit [c]c.setText("");[/c] gelöscht, weil wir diesen Text ja selbst zeichnen wollen. Zusätzlich werden noch die Referenzen "table" und "row" gesichert, weil wir sie zur Bestimmung der Zeilenhöhe benötigen.

Die Methode "paintComponent" ist wohl selbsterklärend.

Gruß,
André
 
Ä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
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
M JComboBox in JTable immer sichtbar AWT, Swing, JavaFX & SWT 16
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

Neue Themen


Oben