L
Louis2
Gast
Hallo,
also ich möchte zuerst sagen, dass ich die FAQ und auch viele andere Beiträge zu Checkbox&JTable studiert habe, aber so richtig verstehe ich es -leider- immer noch nicht.
Hintergrund:
- 2 Frames:
Frame 1 - JComboBox (gefüllt mit DB Tabellen Namen) und JTable
Frame 2 - JTable, 2 Spalten 1ste Felder aus DB 2te Checkbox
- Wenn in JComboBox Tabelle xxx ausgewählt wird, Frame 2 öffnet ist, zeigt in der JTable die Felder der Tabelle xxx und in Spalte2 Checkboxen.
- Auswahl der Checkboxen, klick auf JButton --> nur die ausgewählte Felder erscheinen in Frame 1 im Header der JTable
--> Wenn 3 Checkboxen selektiert werden in Frame1 3 Spalten erscheinen, im Header die 3 Feldnamen.
Problem1: Checkboxen in JTable
Also ich habe ein DefaultTableModel, füge auch Zeilenweise ein boolean Wert ein, ist aber noch keine Checkbox, das will ich erreichen.
So wenn ich es richtig verstanden habe brauche ich ein DefaultTableCellRenderer und was mache ich mit meinem DefaultTableModel, kann das eine vom anderen ganz separat behandelt werden? Bruchstücke hab ich bisher, ich stehe auf dem Schlauch...
Problem2: Ausgewählte Felder in Frame1 einfügen im Header
Dazu habe ich mir auch Gedanken gemacht. Ich konnte es noch nicht testen, da ich vorher die Checkboxen in die JTable einfügen muss. Aber was meint Ihr so zum Code?
also ich möchte zuerst sagen, dass ich die FAQ und auch viele andere Beiträge zu Checkbox&JTable studiert habe, aber so richtig verstehe ich es -leider- immer noch nicht.
Hintergrund:
- 2 Frames:
Frame 1 - JComboBox (gefüllt mit DB Tabellen Namen) und JTable
Frame 2 - JTable, 2 Spalten 1ste Felder aus DB 2te Checkbox
- Wenn in JComboBox Tabelle xxx ausgewählt wird, Frame 2 öffnet ist, zeigt in der JTable die Felder der Tabelle xxx und in Spalte2 Checkboxen.
- Auswahl der Checkboxen, klick auf JButton --> nur die ausgewählte Felder erscheinen in Frame 1 im Header der JTable
--> Wenn 3 Checkboxen selektiert werden in Frame1 3 Spalten erscheinen, im Header die 3 Feldnamen.
Problem1: Checkboxen in JTable
Also ich habe ein DefaultTableModel, füge auch Zeilenweise ein boolean Wert ein, ist aber noch keine Checkbox, das will ich erreichen.
So wenn ich es richtig verstanden habe brauche ich ein DefaultTableCellRenderer und was mache ich mit meinem DefaultTableModel, kann das eine vom anderen ganz separat behandelt werden? Bruchstücke hab ich bisher, ich stehe auf dem Schlauch...
Code:
table.setCellRenderer(new MyTableCellRenderer());
static class MyTableCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
.
Code:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.sql.*;
import java.util.*;
import java.util.List;
public class FieldsSelection extends JFrame
{
EmailClient main3;
JTable table;
String comboinhalt[];
boolean isselected = false;
JButton adopt = new JButton("Adopt the settings");
List listfields;
int fieldslen;
DefaultTableModel model;
String resultTable;
public FieldsSelection(EmailClient emailclient)
{
super("Java bulk-email (Fields Selection)");
this.main3 = emailclient;
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
JPanel select = new JPanel();
select.setLayout(new FlowLayout(FlowLayout.LEFT));
select.add(adopt);
contentPane.add(select);
String[] title = new String[]
{
"Fields", "Selection"
};
model = new DefaultTableModel (title,0);
table = new JTable(model)
{
public boolean isCellEditable(int rowIndex, int vColIndex)
{
return false;
}
};
getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(false);
table.setCellSelectionEnabled(true);
try
{
String resultselectedtable=new String();
String resulttablefields=new String();
Statement selectedtable = main3.connection.createStatement();
resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.choice + "'";
ResultSet rs1 = selectedtable.executeQuery(resultselectedtable);
List result = new ArrayList();
while (rs1.next())
{
result.add(rs1.getString(1));
}
selectedtable.close();
List listresult = (java.util.List) result;
resultTable = (String) listresult.get(0);
Statement tablefields = main3.connection.createStatement();
resulttablefields = "SELECT column_name FROM all_tab_columns WHERE table_name='" + resultTable + "'";
ResultSet rs = tablefields.executeQuery(resulttablefields);
List fields = new ArrayList();
while (rs.next())
{
fields.add(rs.getString(1));
}
listfields = (java.util.List) fields;
fieldslen=listfields.size();
for (int i=0;i<fieldslen;i++)
{
String outlistfields = (String) listfields.get(i);
model.addRow(new Object[] {outlistfields, isselected});
}
}
catch(Exception e3)
{
e3.printStackTrace();
JOptionPane.showMessageDialog(null, "Error: " + "\n" + e3.getMessage());
}
this.pack();
}
}
Problem2: Ausgewählte Felder in Frame1 einfügen im Header
Dazu habe ich mir auch Gedanken gemacht. Ich konnte es noch nicht testen, da ich vorher die Checkboxen in die JTable einfügen muss. Aber was meint Ihr so zum Code?
Code:
if (action == main2.adopt) //Button von Klasse FieldsSelection
{
List selectedfieldsList = new ArrayList();
for (int i=0;i<main2.fieldslen;i++) // fieldslen Länge der JTable mit Felder
{
if (main2.isselected == true) // wenn CheckBox true dann pack Wert in neue Liste
{
String selectedfields = (String) main2.listfields.get(i);
selectedfieldsList.add(selectedfields);
}
}
int selectedfieldslen = selectedfieldsList.size();
TableColumn column = new TableColumn();
for (int j=0;j<selectedfieldslen;j++) //Gib Werte in JTable im Header aus
{
column.setHeaderValue(selectedfieldsList.get(j));
columnModel.addColumn(column);
}
}