Hallo liebe Gemeinde! 
Ich habe ein Problem und hoffe dass mir vielleicht wer aus der Patsche helfen kann?!
Ich habe eine JTable (THX Turtle!), bei der ich aus den markierten Rows, beim Klick auf den Button "Add", eine neue JTable erstellen will. In das Panel darunter... Leider komm ich nicht weiter. Die JTable wird aus einem Resultset erstellt.
Leider lassen sich die Boolean Checkboxen auch nicht anklicken. bei einem Doppelklick auf die Checkbox, steht zwar false da und ich true reinschreiben - ändert sich aber nicht. Hat auch hierzu wer Rat, wie ich die Checkboxen einfach anklicken kann?
Wäre für jeden Rat Dankbar :toll:
Lg
Ich habe ein Problem und hoffe dass mir vielleicht wer aus der Patsche helfen kann?!
Ich habe eine JTable (THX Turtle!), bei der ich aus den markierten Rows, beim Klick auf den Button "Add", eine neue JTable erstellen will. In das Panel darunter... Leider komm ich nicht weiter. Die JTable wird aus einem Resultset erstellt.
Leider lassen sich die Boolean Checkboxen auch nicht anklicken. bei einem Doppelklick auf die Checkbox, steht zwar false da und ich true reinschreiben - ändert sich aber nicht. Hat auch hierzu wer Rat, wie ich die Checkboxen einfach anklicken kann?
Wäre für jeden Rat Dankbar :toll:
Java:
package optik;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.WindowConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
import logik.DatenbankVerbindung;
public class Table1 implements ActionListener{
private JFrame jFrame = new JFrame();
private DatenbankVerbindung dbv = new DatenbankVerbindung();
private JPanel aa = new JPanel(new BorderLayout());
private JPanel bb = new JPanel(new BorderLayout());
private JButton add = new JButton("Bearbeiten");
private JButton delete = new JButton("Loeschen");
private JSplitPane splitPane;
private JTable tbl1, tbl2;
private JScrollPane scrollPane1, scrollPane2;
private GridBagLayout gbl = new GridBagLayout();
private GridBagConstraints gbc = new GridBagConstraints();
private JPanel buttonPanel = new JPanel(gbl);
private String produkt = "";
public Table1(int id, String produkt) {
jFrame.setTitle(produkt);
this.produkt = produkt;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets (5,0,30,5);
gbc.anchor = GridBagConstraints.EAST;
add.setPreferredSize(new Dimension(130, 25));
add.addActionListener(this);
gbl.setConstraints(add, gbc);
buttonPanel.add(add);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.insets = new Insets (5,5,30,0);
gbc.anchor = GridBagConstraints.WEST;
delete.setPreferredSize(new Dimension(130, 25));
delete.addActionListener(this);
gbl.setConstraints(delete, gbc);
buttonPanel.add(delete);
dbv.verbinden();
ResultSet rs = dbv.produktAuflistung(produkt);
TableModelFromRS tmfr = new TableModelFromRS(rs);
DefaultTableColumnModel dtcm = tmfr.GetColumnModel();
tbl1 = new JTable(tmfr, dtcm);
tbl2 = new JTable();
dtcm.getColumn(0).setCellRenderer(tbl1.getDefaultRenderer(Boolean.class));
scrollPane1 = new JScrollPane(tbl1);
scrollPane2 = new JScrollPane(tbl2);
scrollPane1.getVerticalScrollBar().setUnitIncrement(15);
scrollPane2.getVerticalScrollBar().setUnitIncrement(15);
aa.add(BorderLayout.CENTER, tbl2);
aa.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
aa.setPreferredSize(new Dimension(800, 325));
bb.add(BorderLayout.SOUTH, buttonPanel);
bb.add(BorderLayout.CENTER, scrollPane1);
bb.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
bb.setPreferredSize(new Dimension(800, 375));
splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, bb, aa);
splitPane.setDividerLocation(0.70);
splitPane.setDividerSize(0);
splitPane.setResizeWeight(0.70);
splitPane.setEnabled(false);
jFrame.setSize(850, 700);
jFrame.setLocationRelativeTo(null);
jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jFrame.setBackground(SystemColor.window);
jFrame.setContentPane(splitPane);
jFrame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
dbv.verbinden();
ResultSet rs = dbv.produktAuflistung(produkt);
String[] spaltenNamen = null;
int rsSpaltenAnzahl = 0;
ResultSetMetaData metaData;
int [] selectetRows = null;
try {
if (e.getSource() == add){
metaData = rs.getMetaData();
rsSpaltenAnzahl = metaData.getColumnCount();
spaltenNamen = new String[rsSpaltenAnzahl];
selectetRows = tbl1.getSelectedRows();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
for(int i = 0; i < spaltenNamen.length; i++) {
TableColumn tc = new TableColumn(i);
tc.setHeaderValue(spaltenNamen[i]);
}
jFrame.repaint();
}
class TableModelFromRS extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private String[] columName;
private ArrayList<Object[]> zeilenList;
TableModelFromRS(ResultSet rs) {
ResultSetMetaData metaData; // Metadaten - beinhalten alle infos zur Tabelle
try {
metaData = rs.getMetaData();
// Anzahl der Zeilen im Resultset
int rsSpaltenAnzahl = metaData.getColumnCount() + 1;
columName = new String[rsSpaltenAnzahl];
columName[0] = "ADD"; //Erste Spalte ein Boolean
for (int i = 1; i < rsSpaltenAnzahl; ++i) {
columName[i] = metaData.getColumnLabel(i); // Beinhaltet jetzt alle SpaltenNamen
System.out.println(columName[i]);
}
// Alle Zeilen abspeichern
zeilenList = new ArrayList<Object[]>(); //neue ArrayList bestehend aus Objekt Arrays
while (rs.next()) { // solange spalten im Resultset sind ...
Object[] zeilenArray = new Object[rsSpaltenAnzahl]; // ... wird jeweils ein neues Array vom Typ Objekt erstellt mit der Länge der Spalten im Resultset [rsSpaltenAnzahl]
// jeweils in die Erste Spalte wird ein Boolean wert angelegt.
zeilenArray[0] = new Boolean(false); // False, weil nicht markiert
for (int i = 1; i < rsSpaltenAnzahl; i++) { // Jede Zeile einzeln einlesen
zeilenArray[i] = rs.getObject(i);
}
zeilenList.add(zeilenArray);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public int getRowCount() {
return zeilenList.size();
}
@Override
public int getColumnCount() {
return columName.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return zeilenList.get(rowIndex)[columnIndex];
}
public boolean isCellEditable(int row, int column) {
if(column == 0)
return true;
else
return false;
}
public DefaultTableColumnModel GetColumnModel() {
DefaultTableColumnModel dtcm = new DefaultTableColumnModel();
for(int i = 0; i < columName.length; i++) {
TableColumn tc = new TableColumn(i);
tc.setHeaderValue(columName[i]);
dtcm.addColumn(tc);
}
return dtcm;
}
}
}
Lg