Drag an Drop JTable Zelle

redo088

Mitglied
Hallo zusammen,
bin neu in Swing :( mein problem ist folgendes:
ich habe ein JTable, welcher Stundenplan darstellt. ich will nun eine Zelle in diesem JTable mit dem rechten Maus anklicken und somit die Daten in dieser Zelle eingeben und letzendlich die HintergrundFarbe mit einem JColorChooser einstimmen. Bitte um eure Hilfe.
 

André Uhres

Top Contributor
Hallo zusammen,
bin neu in Swing :( mein problem ist folgendes:
ich habe ein JTable, welcher Stundenplan darstellt. ich will nun eine Zelle in diesem JTable mit dem rechten Maus anklicken und somit die Daten in dieser Zelle eingeben und letzendlich die HintergrundFarbe mit einem JColorChooser einstimmen. Bitte um eure Hilfe.

Hall redo088,

hier ist ein kleines Beispiel. Ich hoffe, das ist was du meinst:
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;
import javax.swing.*;
import javax.swing.table.*;

public class TableDemo extends JFrame {

    private final HashMap<String, Color> colorMap;
    private final JTable table;
    private final JDialog dialog;
    private final JToolBar toolbar;
    private final JButton btColor, btOK;
    private final JPanel mainpanel;
    private final JTextField textfield;

    public TableDemo() {
        dialog = new JDialog(this);
        toolbar = new JToolBar();
        btColor = new JButton("Color...");
        mainpanel = new JPanel();
        textfield = new JTextField();
        btOK = new JButton("OK");
        table = new JTable() {

            @Override
            public Component prepareRenderer(final TableCellRenderer renderer,
                    final int row, final int column) {
                Component c = super.prepareRenderer(renderer, row, column);
                int rowM = convertRowIndexToModel(row);
                int columnM = convertColumnIndexToModel(column);
                String key = rowM + "," + columnM;
                Color color = colorMap.get(key);
                c.setBackground(color);
                return c;
            }
        };

        dialog.setModal(true);
        dialog.setResizable(false);
        toolbar.setRollover(true);
        btColor.setFocusable(false);
        btColor.setHorizontalTextPosition(SwingConstants.CENTER);
        btColor.setVerticalTextPosition(SwingConstants.BOTTOM);
        btColor.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(final ActionEvent evt) {
                Color color = JColorChooser.showDialog(TableDemo.this, "Color Chooser",
                        Color.WHITE);
                if (color == null) {
                    color = Color.WHITE;
                }
                int selectedRow = table.getSelectedRow();
                int selectedColumn = table.getSelectedColumn();
                String key = table.convertRowIndexToModel(selectedRow) + ","
                        + table.convertColumnIndexToModel(selectedColumn);
                colorMap.put(key, color);
                textfield.setBackground(color);
            }
        });
        toolbar.add(btColor);
        dialog.getContentPane().add(toolbar, BorderLayout.PAGE_START);
        textfield.setPreferredSize(new Dimension(200, 20));
        mainpanel.add(textfield);
        btOK.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(final ActionEvent evt) {
                dialog.setVisible(false);
                int selectedColumn = table.getSelectedColumn();
                int selectedRow = table.getSelectedRow();
                table.setValueAt(textfield.getText(), selectedRow, selectedColumn);
            }
        });
        mainpanel.add(btOK);
        dialog.getContentPane().add(mainpanel, BorderLayout.CENTER);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        table.setModel(new DefaultTableModel(
                new Object[][]{
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null}
                },
                new String[]{
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }) {

            Class[] types = new Class[]{
                String.class, String.class, String.class, String.class
            };
            boolean[] canEdit = new boolean[]{
                false, false, false, false
            };

            @Override
            public Class getColumnClass(final int columnIndex) {
                return types[columnIndex];
            }

            @Override
            public boolean isCellEditable(final int rowIndex,
                    final int columnIndex) {
                return canEdit[columnIndex];
            }
        });
        table.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseReleased(final MouseEvent evt) {
                boolean rightMouseButton = SwingUtilities.isRightMouseButton(evt);
                if (rightMouseButton) {
                    Point point = evt.getPoint();
                    int rowAtPoint = table.rowAtPoint(point);
                    int columnAtPoint = table.columnAtPoint(point);
                    table.changeSelection(rowAtPoint, columnAtPoint, false, false);
                    dialog.setLocationRelativeTo(TableDemo.this);
                    textfield.setText("");
                    textfield.setBackground(Color.WHITE);
                    Object value = table.getValueAt(rowAtPoint, columnAtPoint);
                    if (value != null) {
                        textfield.setText(value.toString());
                    }
                    String key = table.convertRowIndexToModel(rowAtPoint) + ","
                            + table.convertColumnIndexToModel(columnAtPoint);
                    Color color = colorMap.get(key);
                    if (color != null) {
                        textfield.setBackground(color);
                    }
                    dialog.setVisible(true);
                }
            }
        });
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
        pack();
        dialog.pack();
        colorMap = new HashMap<String, Color>();
    }

    public static void main(final String args[]) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TableDemo().setVisible(true);
            }
        });
    }
}
Gruß,
André
 
Zuletzt bearbeitet:

redo088

Mitglied
Hallo,
danke für das Programm , das war mir sehr hilfreich. Nur ich habe ein Renderer in mein JTable schon implementiert , ich habe dein Programm so angepasst , dass ich den Fenster bekommen und so die Farbe auswähle, aber wenn ich auf ok drücke änder sich nix an mein JTable??? was soll ich machen..
 

André Uhres

Top Contributor
Nur ich habe ein Renderer in mein JTable schon implementiert , ich habe dein Programm so angepasst , dass ich den Fenster bekommen und so die Farbe auswähle, aber wenn ich auf ok drücke änder sich nix an mein JTable??? was soll ich machen..

Ja, was soll ich dazu sagen? Mach es genau so wie im Beispiel. Es wird klappen, auch in deinem Programm. Das verspreche ich dir :) .

Gruß,
André
 

redo088

Mitglied
hallo,
ich habe dein Programm implementiert funktioniert leider aber nicht so ganz :(. Wie gesagt ich habe für den JTable schon ein anderer Renderer implementiert für zellenfarben. ich habe dein Programmm implementiert, ich kann die Farbe ändern, aber das was in der Zelle steht wird nicht mehr gezeigt???
 

André Uhres

Top Contributor
Hallo redo088,

wir können "prepareRenderer" entfernen und seine Logik in den Renderer schieben:
Java:
...
    public TableDemo() {
...
        table = new JTable();
...
        table.setDefaultRenderer(String.class, new MyRenderer(colorMap));
    }
...
}

class MyRenderer extends DefaultTableCellRenderer {

    private final Map<String, Color> colorMap;

    public MyRenderer(Map<String, Color> colorMap) {
        this.colorMap = colorMap;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        int rowM = table.convertRowIndexToModel(row);
        int columnM = table.convertColumnIndexToModel(column);
        String key = rowM + "," + columnM;
        Color color = colorMap.get(key);
        c.setBackground(color);
        return c;
    }
}
Gruß,
André
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
N Swing JTable und Drag und Drop AWT, Swing, JavaFX & SWT 2
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
G JTable drag and drop AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
R Drag & Drop einer einzelnen Zelle (JTable) AWT, Swing, JavaFX & SWT 2
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
AmsananKING ListView Drag And Drop AWT, Swing, JavaFX & SWT 0
AmsananKING Drag And Drop Filenames Inside A Listview AWT, Swing, JavaFX & SWT 1
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
F Drag und Drop AWT, Swing, JavaFX & SWT 0
L JavaFX JavaFX Chart Drag and Drop AWT, Swing, JavaFX & SWT 3
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
U Drag and Drop mit imageview AWT, Swing, JavaFX & SWT 0
U Drag and Drop imageviews AWT, Swing, JavaFX & SWT 8
D SteelSeries in Netbeans als Drag-and-Drop einbinden AWT, Swing, JavaFX & SWT 0
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
C Drag and Drop (inventar) AWT, Swing, JavaFX & SWT 15
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
HaukeG Swing Drag & Drop in verschiedenen Varianten AWT, Swing, JavaFX & SWT 4
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
R Drag 'n Drop AWT, Swing, JavaFX & SWT 3
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
C Swing Drag and Drop mit Objekten in einem Fenster. AWT, Swing, JavaFX & SWT 9
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
B Drag and Drop AWT, Swing, JavaFX & SWT 6
K Drag and Drop Workbench AWT, Swing, JavaFX & SWT 2
P SWT Eclipse Draw2D Drag and Drop (ruckelt) AWT, Swing, JavaFX & SWT 4
F SWT Drag and Drop im TreeViewer AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
A TransferHandler & Drag n' Drop AWT, Swing, JavaFX & SWT 2
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
E Swing Beim Drag & Drop, Drag verbieten?! AWT, Swing, JavaFX & SWT 2
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Drag and Drop JPanel auf JPanel nach drop erneut verschieben? AWT, Swing, JavaFX & SWT 3
M Drag and Drop: Quellfenster AWT, Swing, JavaFX & SWT 2
M Buttons per Drag & Drop im GridBagLayout verschieben AWT, Swing, JavaFX & SWT 6
M Swing JList > Drag & Drop AWT, Swing, JavaFX & SWT 2
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
H Drag&Drop mit GWT AWT, Swing, JavaFX & SWT 8
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
V SWT TreeViewer Drag'n'Drop LocalSelectionTransfer AWT, Swing, JavaFX & SWT 10
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
S Drag'n'Drop AWT, Swing, JavaFX & SWT 8
M Drag & Drop in Swing (createTransferable) AWT, Swing, JavaFX & SWT 6
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
J Drag'n Drop imm selben Frame unterbinden AWT, Swing, JavaFX & SWT 3
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
X wiedermal Drag n Drop AWT, Swing, JavaFX & SWT 2
P Drag & Drop AWT, Swing, JavaFX & SWT 2
X Drag and Drop AWT, Swing, JavaFX & SWT 2
F Drag&Drop Jlist -> JList AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben