Verschiedene ComboBoxen in JTable

Status
Nicht offen für weitere Antworten.
K

kriizz

Gast
Hallo,

ich habe nun seit ca. 3 Monanten in der Schule JAVA, also bin ich ein kompletter Neuling ;)

Ich hänge zur Zeit an einem Problem...
Ich habe eine Tabelle, in der in der ersten Spalte "Aufgaben" stehen und in der Zweiten die Mitarbeiter aus einer Checkbox ausgewählt werden.

Die Chekcboxen auszulesen ist kein Problem. Nur muss ich wissen, welche Checkbox geändert wurde. Also welche Aufgabe quasi zur CheckBox gehört. Kann mir da jemand helfen???

Code:
package tasks;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;

import javax.swing.JTable;
import javax.swing.DefaultCellEditor;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;

import moduls.MysqlConnect;


public class taskGiveGui extends JPanel {
    
    
    /**
     * Liest aus DB aus, erstellt Array mit Länger der Einträge und füllt das Array mit den Namen.
     * @return Inhalt für ComboBox
     */
    public static String[] selectComboBox() {
        // arraylaenge auswählen
         int i = 0; 
        try {
           
           java.sql.Connection conn = MysqlConnect.connect();  // Verbindung zur DB
           Statement stmt = conn.createStatement();
           ResultSet rs = null;                      
           rs = stmt.executeQuery("SELECT firstname,surname FROM login");                      
           
           while ( rs.next() ){
             i++;             
           }           
        throw new Exception();
        } catch(Exception e) {
            System.out.println("da stimmt was nicht");
        }
        
       int n = i;
       String[] titles = new String[n];
        try {
           
           java.sql.Connection conn = MysqlConnect.connect();  // Verbindung zur DB
           Statement stmt = conn.createStatement();
           ResultSet rs = null;
           
                      
           rs = stmt.executeQuery("SELECT firstname,surname FROM login");
           titles[0] ="Bitte wählen";
           int j = 1;
           
           
           while ( rs.next() ){
             titles[j] = rs.getString(2)+","+ rs.getString(1);
             j++;
             
           }       
        
        throw new Exception();
        } catch(Exception e) {
            System.out.println("da stimmt was nicht");
        }
        return titles;
    }
    
   /** Aufgaben aus DB lesen **/ 
   public static Object[][] selectTasks() {
       int i = 0; 
        try {
           
           java.sql.Connection conn = MysqlConnect.connect();  // Verbindung zur DB
           Statement stmt = conn.createStatement();
           ResultSet rs = null;                      
           rs = stmt.executeQuery("SELECT task FROM tasks");                      
           
           while ( rs.next() ){
             i++;             
           }           
        throw new Exception();
        } catch(Exception e) {
            System.out.println("da stimmt was nicht");
        }
       int n = i;
       Object[][] tasks = new Object[n][2];
       
       try {
           
           java.sql.Connection conn = MysqlConnect.connect();  // Verbindung zur DB
           Statement stmt = conn.createStatement();
           ResultSet rs = null;
           
                      
           rs = stmt.executeQuery("SELECT task FROM tasks");
           
           int j = 0;
           
           
           while ( rs.next() ){
             tasks[j][0] = rs.getString(1);
             tasks[j][1] = "Bitte wählen";
             j++;             
           }       
        
        throw new Exception();
        } catch(Exception e) {
            System.out.println("da stimmt was nicht");
        }
        return tasks; 
        
    }
    
    /**
     * Tabelle zusammenbauen
     */
     static class TableModel extends AbstractTableModel {
        Object[] titles = {"Aufgabe", "Mitarbeiter"}; 
        
        Object[][] contents = selectTasks();
            
        
        /** Liefert den Namen der geforderten Spalte.
         * @return Name der Spalte.
         */
     
        public String getColumnName(int col) {
            return titles[col].toString();
        }

        /* Liefert die Anzahl der Zeilen zurück.
         * @return die Anzahl der Zeilen.
         */
        public int getRowCount() { return contents.length; }
        
        /* Liefert die Anzahl der Spalten zurück.
         * @return die Anzahl der Spalten.
         */
        public int getColumnCount() { return titles.length; }
        
        /** Liefert den Wert in der geforderten Zeile/Spalte.
         * @return Wert in der geforderten Zeile/Spalte.
         */
        public Object getValueAt(int row, int col) {
            return contents[row][col];
        }
         
        
        public void setValueAt(Object value, int row, int col) {
            contents[row][col] = value;
            fireTableCellUpdated(row, col); // Listener informieren, dass sich etwas geändert hat
        }

        /** Gibt an, ob der Wert in der geforderten Zeile/Spalte editierbar sein soll.
         * @return wahr wenn editierbar, falsch wenn nicht.
         */
        public boolean isCellEditable(int row, int col) {
            if (col == 1) {
                return true;
            } else {
                return false;
            }
        }
     
        /** Gibt an, was für ein Datentyp in der geforderten Spalte steht.
         * @return Datentyp der Spalte (Wrapper Klasse für primitive Datentypen).
         */
        public Class getColumnClass(int col) {
            if ( col <= 1 ) {
                return String.class;
            } else {
                return Boolean.class;
                       
        }
    }
     
   
     }
    /**
     * Tabelle in ScrollPane setzen
     * @return ScrollPane für den MainFrame
     */
    
    public static JComponent createTable() {
        
        Object[] items = selectComboBox();
        JComboBox comboBox = new JComboBox(items); // ComboBox mit Inhalt initialisieren
        comboBox.addItemListener(new ItemListener() {
             public void itemStateChanged(ItemEvent e) {
                System.out.println(e.getSource());
       }});

        JTable table = new JTable(new TableModel()); // Tabelle erzeugen
        TableColumn colModel = table.getColumnModel().getColumn(1); // Spaltenmodell holen        
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        JTableHeader header = table.getTableHeader();
       
        header.setBackground(new Color( 255, 180, 0));
        colModel.setCellEditor(new DefaultCellEditor(comboBox)); // comboB
        table.setShowVerticalLines(false);
        table.setBackground(Color.WHITE);
        header.setAlignmentY(LEFT_ALIGNMENT);
        header.setFont(new Font("TimesRoman",Font.BOLD,14));
         
        
        JScrollPane pane = new JScrollPane(table);
        pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        
    
        return pane;            
        
        
    }
    
}
 

Dit

Bekanntes Mitglied
schau dir die Methode :

public Object getValueAt(int row, int col){
}

mal genauer an ;) vor allem wann sie aufgerufen wird und was sie zurück gibt, denke müsste dir schon mal nen bisschen weiter helfen!
 

MathiasBauer

Bekanntes Mitglied
Hallo,

vielleicht kann man das auch über einen PopupListener lösen, der deinen Comboboxen angehängt ist.

Deinen Comboboxen gibst du ein "setActionCommand" mit und im Popuplistener fragst du das dann so ab:

Code:
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {

           Object source = e.getSource();

           if (source instanceof JComboBox) {  

                String actionCmd = ((JComboBox) source).getActionCommand();

           }

}

Die Idee habe ich von folgendem Link:

http://www.wer-weiss-was.de/theme35/article2020402.html

Schau dir vor allem den letzten Beitrag an!
 
G

Guest

Gast
Hi...

@Mathias...
sowas habe ich mri auch schon gedacht, aber ich kann keinen ActionCommand für jeden einzeln übergeben.
Wie du siehst wird das im ColModel eingefügt. und somit ja immer der gleiche Command...

Ich hab bisher auch noch keine Lösung gefunden dies anders zu machen.

@Dit..

bei deiner Lösung bin ich gerade noch.. hab aber noch nicht ganz verstanden was du meinst.. vielleicht komm ich ja noch drauf

gruß
 

MathiasBauer

Bekanntes Mitglied
Kann es sein, dass du nur ein Objekt comboBox hast und immer nur deine items austauschst?

Ich glaube, dann wirst du keine andere Möglichkeit haben als mehrere Objekte zu erzeugen.
 
G

Guest

Gast
Ja ich habe nur dieses eine Objekt. Aber kannst du mri bitte sagen, wie ich sonst die Tabellenspalte füllen soll?
Wie kann ich dann zum beispiel die Zeile angeben? ich kann dooch immer nur eine komplette Spalte damit füllen...
 

MathiasBauer

Bekanntes Mitglied
Hallo,

ich kann mir leider deinen Code erst morgen wieder anschauen...

Aber so wie ich das sehe, hast du keine andere Wahl, als mehrere Objekte zu erzeugen.
 
G

Guest

Gast
Hey...

danke.. hat sich nun schon erledigt... habs hinbekommen und tut so wie ich will...
hat nun lange gedauert, aber besser spät als nie ;)

danke nochmal
 
G

Guest

Gast
Code:
 public Component getTableCellEditorComponent(JTable table, Object obj, boolean isSelected, int row, int col) {
      
      Boolean lValueAsBoolean = (Boolean)obj;
       theButton.setSelected(lValueAsBoolean.booleanValue());
       Object[][] ma = EmployeeSurveyGetData.selectData();
       theButton.setActionCommand((String)ma[row][0]);
      return theButton;
    }

hab hier mein Beispiel mit dem Button mal (ist genau so aufgebaut wie das mit der ComboBox).

Habe hier dem Button einen ActionCommand zugewiesen, der nachher in getCellEditorValue aufgerufen wird.
Das gleiche funktioniert so auch bei meiner ComboBox... ist vielleicht nciht die schönste art, aber es tut :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
E verschiedene Cursor setzen AWT, Swing, JavaFX & SWT 1
I GUI, das verschiedene Panels hat (Von Seite zu Seite navigieren) AWT, Swing, JavaFX & SWT 7
RedEagle JavaFX Verschiedene Bereiche miteinander verknüpfen AWT, Swing, JavaFX & SWT 7
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
E wie fängt man verschiedene Ereignisse ein mit MVC ? AWT, Swing, JavaFX & SWT 42
S JavaFX Optimierung für verschiedene Auflösungen AWT, Swing, JavaFX & SWT 12
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
V Swing Nimbus Look And Feel verschiedene Buttons AWT, Swing, JavaFX & SWT 8
W Verschiedene Foreground color in Combo SWT Auswahlliste AWT, Swing, JavaFX & SWT 5
L AWT Window, Dialog und verschiedene Betriebssysteme AWT, Swing, JavaFX & SWT 2
M 3D-Grafik verschiedene Texturen auf einen Würfel mappen AWT, Swing, JavaFX & SWT 15
T Swing verschiedene Auflösungen AWT, Swing, JavaFX & SWT 7
J 3D-Grafik JOGL - Verschiedene Perspektiven darstellen AWT, Swing, JavaFX & SWT 5
R JTree - verschiedene Verzeichnisse AWT, Swing, JavaFX & SWT 3
T AWT verschiedene Oberflächen programmieren AWT, Swing, JavaFX & SWT 5
D verschiedene Zeichenebenen AWT, Swing, JavaFX & SWT 10
M Verschiedene Layouts anzeigen AWT, Swing, JavaFX & SWT 5
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
H Swing TableCellRenderer für verschiedene Spalten AWT, Swing, JavaFX & SWT 11
N Verschiedene FormLayout in einem Panelbuilder AWT, Swing, JavaFX & SWT 3
D Verschiedene ActionEvents für ein JButton-Array AWT, Swing, JavaFX & SWT 2
M Swing Swing, MVC über verschiedene Panel AWT, Swing, JavaFX & SWT 4
P verschiedene JPanels einblenden je nach auswahl AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
D 2 verschiedene Frames mit einem Button schliessen AWT, Swing, JavaFX & SWT 2
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
I JTable: "GLEICHZEITIG" zwei verschiedene TableMode AWT, Swing, JavaFX & SWT 2
F GridLayout: verschiedene Spaltenbreiten AWT, Swing, JavaFX & SWT 2
S verschiedene Menuleisten AWT, Swing, JavaFX & SWT 2
S In einem button Panel 2 verschiedene TiteledBoarder erzeugen AWT, Swing, JavaFX & SWT 5
T verschiedene Farben in einem Text/Editfeld AWT, Swing, JavaFX & SWT 11
R Fenster in verschiedene Bereiche teilen - aber wie? AWT, Swing, JavaFX & SWT 4
D Mehrere verschiedene Textfelder auslesen? AWT, Swing, JavaFX & SWT 10
Icewind Verschiedene Farben in einer JTextArea AWT, Swing, JavaFX & SWT 3
F Verschiedene Vordergrundfarben in einer TextArea AWT, Swing, JavaFX & SWT 4
G JFileChooser in verschiedene Sprachen? AWT, Swing, JavaFX & SWT 6
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
M Date Picker mit 3 ComboBoxen AWT, Swing, JavaFX & SWT 2
D Comboboxen werte Falsch. AWT, Swing, JavaFX & SWT 2
M Comboboxen in JTable - Werte auslesen AWT, Swing, JavaFX & SWT 9
B JOptionPane.showInputDialog mit drei ComboBoxen nebeneinande AWT, Swing, JavaFX & SWT 2
J Große Anzahl von Comboboxen in Tabelle darstellen AWT, Swing, JavaFX & SWT 2
C JTable , 2 Comboboxen synchronisieren AWT, Swing, JavaFX & SWT 2
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben