nathaniells freak
Mitglied
Hallo Jungs ich versuche einer JTable eine Methode bei zubringen mit der man ein java.awt.Object[] übergibt worin TextFields, Comboxen und Checkboxen enthalten sind in dem Feld. Dann dieses Feld so zu benutzen das man mit dieser Funktion den Inhalt setzen kann, quasi Welche Spalte enthält welche Components (CHeckbox, ComboBox, TextField). Im Moment zeigt er nur den Klassennamen mit dem den Steuerparametern an in der Zelle. Außer bei den Checkboxen denn da zeigt er wie schon erwähnt nur false oder true an.
Dabei will ich dann auch das wenn eine ComboBox gesetzt wird diese auch auf das ComboBoxModell zugreifen kann. Bis hier hin funktioniert auch alles. Der Witz ist nur das er mit die ComboBox nicht ausklappt und bei der CheckBox das kästchen nicht anzeigt sondern nur true oder false in das Feld schreibt.
Hier der Quellcode der MyTable Klasse:
und hier der Code in dem ich die Tabelle erzeuge und das Bsp starte:
Wie gesagt ich will das Java mir am Ende das Kästchen anzeigt für die CheckBox und das die ComboBox sich aufklappen lässt.
Das ganze soll dann so ähnlich aussehen wie bei Suns Beispiel "How to use Tables" wie unter diesem Link: "http://java.sun.com/docs/books/tutorial/uiswing/components/table.html"
CU Micha
Dabei will ich dann auch das wenn eine ComboBox gesetzt wird diese auch auf das ComboBoxModell zugreifen kann. Bis hier hin funktioniert auch alles. Der Witz ist nur das er mit die ComboBox nicht ausklappt und bei der CheckBox das kästchen nicht anzeigt sondern nur true oder false in das Feld schreibt.
Hier der Quellcode der MyTable Klasse:
Java:
package MyControlElements;
import java.util.Vector;
import javax.swing.table.TableCellRenderer;
public class MyTable extends javax.swing.JTable
implements MySteuerelementInterface {
private boolean lesenBerechtigung;
private boolean schreibenBerechtigung;
private int komponentennr;
private String name;
private Vector<Boolean[]> editable;
private Vector<java.awt.Color[]> backgroundcolor;
private int col;
private java.lang.Object ObjectRow[];
public MyTable(int COL) {
this.col = COL;
this.editable = new Vector<Boolean[]>();
this.editable.trimToSize();
this.backgroundcolor = new Vector<java.awt.Color[]>();
this.backgroundcolor.trimToSize();
this.ObjectRow = null;
}
public void renderRow(int ROW) {
for(int i = 0;i < this.getColumnCount();i++) {
this.prepareRenderer(this.getCellRenderer(ROW,i),ROW,i);
}
}
public void renderRow(int vonROW, int bisROW) {
for(int v = vonROW;v <= bisROW;v++) {
for(int i = 0;i < this.getColumnCount();i++) {
this.prepareRenderer(this.getCellRenderer(v,i),v,i);
}
}
}
@Override
public java.awt.Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int vColIndex) {
java.awt.Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
int cols = this.getModel().getColumnCount();
if (rowIndex % 2 == 0 && !isCellSelected(rowIndex, vColIndex)) {
if(rowIndex == this.backgroundcolor.size()) {
// zeile existiert noch nicht in vector background
// anlegen des farbvectors
java.awt.Color tmp[] = new java.awt.Color[cols];
for(int i = 0;i < cols;i++) {
tmp[i] = new java.awt.Color(198,230,236);
}
this.backgroundcolor.add(tmp);
this.backgroundcolor.trimToSize();
c.setBackground(this.backgroundcolor.get(rowIndex)[vColIndex]);
}
else {
c.setBackground(this.backgroundcolor.get(rowIndex)[vColIndex]);
}
} else {
if (rowIndex % 2 == 1 && !isCellSelected(rowIndex, vColIndex)) {
if(rowIndex == this.backgroundcolor.size()) {
// zeile existiert noch nicht in vector background
// anlegen des farbvectors
java.awt.Color tmp[] = new java.awt.Color[cols];
for(int i = 0;i < cols;i++) {
tmp[i] = new java.awt.Color(134,209,164);
}
this.backgroundcolor.add(tmp);
this.backgroundcolor.trimToSize();
c.setBackground(this.backgroundcolor.get(rowIndex)[vColIndex]);
}
else {
c.setBackground(this.backgroundcolor.get(rowIndex)[vColIndex]);
}
} else {
// If not shaded, match the table's background
c.setBackground(new java.awt.Color(224,172,129));
}
}
return c;
}
@Override
public boolean isCellEditable(int ROW, int COL) {
System.out.println("ROW = " + ROW);
System.out.println("COL = " + COL);
Boolean tmp[] = this.editable.get(ROW);
return tmp[COL].booleanValue();
}
public boolean getSchreibenBerechtigung() {
return this.schreibenBerechtigung;
}
public boolean getLesenBerechtigung() {
return this.schreibenBerechtigung;
}
public int getKomponentenNummer() {
return this.komponentennr;
}
public String getKomponentenName() {
return this.name;
}
public void setSchreibenBerechtigung(boolean BERECHTIGUNG) {
this.schreibenBerechtigung = BERECHTIGUNG;
}
public void setLesenBerechtigung(boolean BERECHTIGUNG) {
this.lesenBerechtigung = BERECHTIGUNG;
}
public void setKomponentenNummer(int NR) {
this.komponentennr = NR;
}
public void setKomponentenName(String NAME) {
this.name = NAME;
}
public void setKopfzeile(String HEADER[], int SPALTEN) {
javax.swing.table.DefaultTableModel x = new javax.swing.table.DefaultTableModel(0,SPALTEN);
this.setModel(x);
for(int i = 0;i < SPALTEN;i++) {
this.getTableHeader().getColumnModel().getColumn(i).setHeaderValue(HEADER[i]);
}
this.repaint();
}
public void addNeueZeile() {
int size = this.col;
int rows = this.getModel().getRowCount();
Boolean tmp[] = new Boolean[size];
for(int i = 0;i < size;i++) {
tmp[i] = new Boolean(true);
}
this.editable.add(tmp);
this.editable.trimToSize();
javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)this.getModel();
if(this.ObjectRow == null) {
String X[] = new String[size];
for(int i = 0;i < size;i++) {
X[i] = "";
tmp[i] = new Boolean(true);
}
model.addRow(X);
}
else {
System.out.println("Object Row nicht NULL");
java.lang.Object tmprow[] = new java.lang.Object[this.getColumnCount()];
for(int i = 0;i < this.getColumnCount();i++) {
try {
tmprow[i] = this.ObjectRow[i].getClass().newInstance();
}
catch(Exception e) {
System.out.println("Fehler aufgetreten bei erstellen einer neuen Instanz");
}
}
model.addRow(tmprow);
}
this.repaint();
}
public void loescheZeile(int ZEILE) {
// zeile löschen
javax.swing.table.DefaultTableModel tmp = (javax.swing.table.DefaultTableModel)this.getModel();
tmp.removeRow(ZEILE);
this.editable.remove(ZEILE);
this.editable.trimToSize();
}
public void loescheAlleZeilen() {
// zeile löschen
javax.swing.table.DefaultTableModel tmp = (javax.swing.table.DefaultTableModel)this.getModel();
int t = tmp.getRowCount();
for(int i = (t-1);i >= 0;i--) {
tmp.removeRow(i);
this.editable.remove(i);
}
this.editable.trimToSize();
}
public void setCellEditable(int ROW, int COL, boolean EDIT) {
Boolean tmp[] = this.editable.get(ROW);
tmp[COL] = new Boolean(EDIT);
}
public void setCellColor(int ROW, int COL, java.awt.Color BGC) {
this.backgroundcolor.trimToSize();
this.backgroundcolor.get(ROW)[COL] = BGC;
}
public void setRowObjects(java.lang.Object X[]) {
this.ObjectRow = new java.lang.Object[this.col];
for(int i = 0;i < X.length;i++) {
javax.swing.table.TableColumnModel colmModel = this.getColumnModel();
javax.swing.table.TableColumn tc = colmModel.getColumn(i);
if(X[i].getClass().toString().equals("class java.lang.String") || X[i].getClass().toString().equals("class javax.swing.JTextField")) {
System.out.println("Objekt ist = " + "java.lang.String");
javax.swing.JTextField x = new javax.swing.JTextField();
this.ObjectRow[i] = x;
tc.setCellEditor(new javax.swing.DefaultCellEditor(x));
}
else {
if(X[i].getClass().toString().equals("class java.lang.Boolean") || X[i].getClass().toString().equals("class javax.swing.JCheckBox")) {
System.out.println("Objekt ist = " + "javax.swing.JCheckBox");
javax.swing.JCheckBox x = new javax.swing.JCheckBox();
this.ObjectRow[i] = x;
x.setName("");
tc.setCellEditor(new javax.swing.DefaultCellEditor(x));
}
else {
if(X[i].getClass().toString().equals("class javax.swing.JComboBox")) {
System.out.println("Objekt ist = " + "javax.swing.JComboBox");
javax.swing.JComboBox x = new javax.swing.JComboBox();
this.ObjectRow[i] = x;
tc.setCellEditor(new javax.swing.DefaultCellEditor(x));
}
}
}
}
}
}
und hier der Code in dem ich die Tabelle erzeuge und das Bsp starte:
Java:
// erzeuge ScrollPane
this.ScrollPaneSonstiges = new javax.swing.JScrollPane();
this.ScrollPaneSonstiges.setBounds(10, 20, 275, 130);
this.PanelSonstiges.add(this.ScrollPaneSonstiges);
this.PanelSonstiges.setComponentZOrder(this.ScrollPaneSonstiges, 0);
// erzeuge Table
int col5 = 5;
this.TableSonstiges = new MyTable(col5);
this.TableSonstiges.setBounds(0,0, 275, 130);
this.TableSonstiges.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
this.ScrollPaneSonstiges.add(this.TableSonstiges);
this.ScrollPaneSonstiges.setComponentZOrder(this.TableSonstiges, 0);
this.ScrollPaneSonstiges.setViewportView(this.TableSonstiges);
String header5[] = new String[col5];
header5[0] = "BenutzerName";
header5[1] = "SysAktiv";
header5[2] = "SperrAktiv";
header5[3] = "Sperrzeit";
header5[4] = "Test";
this.TableSonstiges.setKopfzeile(header5, col5);
java.lang.Object obj[] = new java.lang.Object[col5];
obj[0] = new String();
obj[1] = new javax.swing.JCheckBox();
obj[2] = new javax.swing.JCheckBox();
obj[3] = new String();
obj[4] = new javax.swing.JComboBox();
this.TableSonstiges.setRowObjects(obj);
javax.swing.table.TableColumn sportColumn = this.TableSonstiges.getColumnModel().getColumn(4);
javax.swing.JComboBox comboBox = new javax.swing.JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Chasing toddlers");
comboBox.addItem("Speed reading");
comboBox.addItem("Teaching high school");
comboBox.addItem("None");
sportColumn.setCellEditor(new javax.swing.DefaultCellEditor(comboBox));
this.TableSonstiges.setPreferredScrollableViewportSize(new java.awt.Dimension(275,130));
this.TableSonstiges.setFillsViewportHeight(true);
for(int i = 0;i < 10;i++) {
this.TableSonstiges.addNeueZeile();
this.TableSonstiges.renderRow(i);
}
Wie gesagt ich will das Java mir am Ende das Kästchen anzeigt für die CheckBox und das die ComboBox sich aufklappen lässt.
Das ganze soll dann so ähnlich aussehen wie bei Suns Beispiel "How to use Tables" wie unter diesem Link: "http://java.sun.com/docs/books/tutorial/uiswing/components/table.html"
CU Micha