Hi !
Ich hab da bestimmt ne richtig einfache Frage, für Leute die schon etwas länger dabei sind. Und zwar hab ich zwei Klassen und möchte in der einen auf die andere zugreifen. Also in meinem Hauptframe, hab ich ein JTable, das Buttons besitzt, in der Klasse Button werden die Buttons erstellt und deshalb ist dort auch der Actionlistener gesetzt. Jeder Button hat eine bestimmte Aufgabe, nämlich eine Zeile bzw. Spalte zu addieren, jetzt muss ich ja dem Actionlistener sagen bzw. dem Button auf welche Reihe und Spalte er da zugreifen soll.
Wie organisiere ich da den Import in der Klasse Buttons? Wie bekomme ich es hin, dass dort die Spalten gekannt werden?
Ich poste mal den Code der Klassen:
So ganz konkret jetzt gefragt, wie greife ich z.B auf
cellVal1[row] zu, aus der Klasse Testklasse hier in meiner ButtonColumnklasse?
--> zieht euch die Klassen ruihg rüber, sie laufen einwandfrei, vielleicht versteht ihr dann besser was ich meine!
Ich hab da bestimmt ne richtig einfache Frage, für Leute die schon etwas länger dabei sind. Und zwar hab ich zwei Klassen und möchte in der einen auf die andere zugreifen. Also in meinem Hauptframe, hab ich ein JTable, das Buttons besitzt, in der Klasse Button werden die Buttons erstellt und deshalb ist dort auch der Actionlistener gesetzt. Jeder Button hat eine bestimmte Aufgabe, nämlich eine Zeile bzw. Spalte zu addieren, jetzt muss ich ja dem Actionlistener sagen bzw. dem Button auf welche Reihe und Spalte er da zugreifen soll.
Wie organisiere ich da den Import in der Klasse Buttons? Wie bekomme ich es hin, dass dort die Spalten gekannt werden?
Ich poste mal den Code der Klassen:
Code:
// Testklasse.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Testklasse extends JFrame implements ActionListener
{
private class MeinWindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent arg0)
{
System.exit(0);
}
}
private int cellVal1[] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
private int cellVal2[] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
private int cellVal3[] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
private int cellVal4[] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
private int sumVal[] = {0,0,0,0};
private DefaultTableModel tableModelButton;
private DefaultTableModel tableModelAuto;
private JComponent jc = (JComponent)getContentPane();
private DefaultTableModel tableModelSumme;
Testklasse()
{
super("Testklasse");
setTitle("Bla");
setSize(800, 500);
initLayout();
setLocationRelativeTo(null);
addWindowListener(new MeinWindowListener());
setVisible(true);
setResizable(true);
}
void initLayout()
{
jc.setLayout( new BorderLayout( ) );
String[] columnNamenSpieler = { "Auto 1", "Auto 2", "Auto 3", "Auto 4"};
String[] columnNamenStartwerte = { "", "", "", ""};
String[] columnNameWurf = { "Fahrzeug"};
Object[][] spalteWuerfe = {
{ "Kategorie 1"},
{ "Kategorie 2"},
{ "Kategorie 3"},
{ "Kategorie 4"},
{ "Kategorie 5"},
{ "Kategorie 6"},
{ "Kategorie 7"},
{ "Kategorie 8"},
{ "Kategorie 9"},
{ "Kategorie 10"},
{ "Kategorie 11"},
{ "Kategorie 12"},
{ "Kategorie 13"}
};
Object[][] autoDaten = {
{ new Integer(cellVal1[0]), new Integer(cellVal2[0]), new Integer(cellVal3[0]), new Integer(cellVal4[0]) },
{ new Integer(cellVal1[1]), new Integer(cellVal2[1]), new Integer(cellVal3[1]), new Integer(cellVal4[1]) },
{ new Integer(cellVal1[2]), new Integer(cellVal2[2]), new Integer(cellVal3[2]), new Integer(cellVal4[2]) },
{ new Integer(cellVal1[3]), new Integer(cellVal2[3]), new Integer(cellVal3[3]), new Integer(cellVal4[3]) },
{ new Integer(cellVal1[4]), new Integer(cellVal2[4]), new Integer(cellVal3[4]), new Integer(cellVal4[4]) },
{ new Integer(cellVal1[5]), new Integer(cellVal2[5]), new Integer(cellVal3[5]), new Integer(cellVal4[5]) },
{ new Integer(cellVal1[6]), new Integer(cellVal2[6]), new Integer(cellVal3[6]), new Integer(cellVal4[6]) },
{ new Integer(cellVal1[7]), new Integer(cellVal2[7]), new Integer(cellVal3[7]), new Integer(cellVal4[7]) },
{ new Integer(cellVal1[8]), new Integer(cellVal2[8]), new Integer(cellVal3[8]), new Integer(cellVal4[8]) },
{ new Integer(cellVal1[9]), new Integer(cellVal2[9]), new Integer(cellVal3[9]), new Integer(cellVal4[9]) },
{ new Integer(cellVal1[10]), new Integer(cellVal2[10]), new Integer(cellVal3[10]), new Integer(cellVal4[10]) },
{ new Integer(cellVal1[11]), new Integer(cellVal2[11]), new Integer(cellVal3[11]), new Integer(cellVal4[11]) },
{ new Integer(cellVal1[12]), new Integer(cellVal2[12]), new Integer(cellVal3[12]), new Integer(cellVal4[12]) }
};
for (int i = 0; i< 6; i++)
{
cellVal1[i] = (i+1)*10 +1;
cellVal2[i] = (i+1)*10 +2;
sumVal[0] = sumVal[0]+cellVal1[i];
sumVal[1] = sumVal[1]+cellVal2[i];
sumVal[2] = sumVal[2]+cellVal3[i];
sumVal[3] = sumVal[3]+cellVal4[i];
Object[][] sumData =
{
{ new Integer(sumVal[0]), new Integer(sumVal[1]), new Integer(sumVal[0]), new Integer(sumVal[1])}
};
tableModelButton = new DefaultTableModel(spalteWuerfe, columnNameWurf)
{
public int getRowCount()
{
return 13;
}
};
tableModelAuto = new DefaultTableModel(autoDaten, columnNamenSpieler );
JTable tableButton = new JTable(tableModelButton)
{
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
};
tableModelSumme = new DefaultTableModel(sumData, columnNamenSpieler );
JTable tableSumData = new JTable(tableModelSumme);
ButtonColumn buttonColumn = new ButtonColumn(tableButton, 0);
tableButton.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
tableButton.getColumn( "Fahrzeug" ).setPreferredWidth( 120 );
JTable tableAuto = new JTable(tableModelAuto);
tableAuto.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
JTable tableSumme = new JTable(tableModelSumme);
tableAuto.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
tableSumme.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
JScrollPane scrollButton = new JScrollPane(tableButton);
scrollButton.setPreferredSize(new Dimension(123,108));
JScrollPane scrollAuto = new JScrollPane (tableAuto);
scrollAuto.setPreferredSize(new Dimension(263,208));
JScrollPane scrollSumme = new JScrollPane (tableSumme);
scrollSumme.setPreferredSize(new Dimension(263,15));
//
JPanel westPnl = new JPanel();
Box box1 = new Box(BoxLayout.X_AXIS);
box1.add(scrollButton);
Box box2 = new Box(BoxLayout.X_AXIS);
box2.add(scrollAuto);
Box box3 = new Box(BoxLayout.X_AXIS);
box3.add(scrollSumme);
westPnl.setLayout(new BoxLayout(westPnl, BoxLayout.X_AXIS));
westPnl.add(box1);
westPnl.add(box2);
westPnl.add(box3);
jc.add("West", westPnl);
}
}
public void actionPerformed(ActionEvent e)
{
}
public static void main(String[] args)
{
Testklasse frame = new Testklasse();
frame.setSize(800, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
//frame.pack();
frame.setVisible(true);
}
}
Code:
// ButtonColumn.java 2. Klasse
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
class ButtonColumn extends AbstractCellEditor implements TableCellRenderer,
TableCellEditor, ActionListener {
JTable table;
JButton renderButton;
JButton editButton;
String text;
public ButtonColumn(JTable table, int column) {
super();
this.table = table;
renderButton = new JButton();
editButton = new JButton();
editButton.setFocusPainted(false);
editButton.addActionListener(this);
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(column).setCellRenderer(this);
columnModel.getColumn(column).setCellEditor(this);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (isSelected) {
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
} else {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager
.getColor("Button.background"));
}
renderButton.setText((value == null) ? "" : value.toString());
return renderButton;
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
text = (value == null) ? "" : value.toString();
editButton.setText(text);
return editButton;
}
public Object getCellEditorValue() {
return text;
}
public void actionPerformed(ActionEvent e)
{
int row = table.getSelectedRow();
System.out.print(e.getActionCommand()+" " + "\n");
// hier soll jetzt die Addition durchgeführt werden dazu muss ich auf
// die ScrollAuto zugreifen wie mach ich das an dieser Stelle?
// wie bekomme ich Zugriff auf diese Zeile aus der Testklasse?
/**System.out.print(cellVal1[row]);
System.out.print(sumVal[1]);*/
}
}
cellVal1[row] zu, aus der Klasse Testklasse hier in meiner ButtonColumnklasse?
--> zieht euch die Klassen ruihg rüber, sie laufen einwandfrei, vielleicht versteht ihr dann besser was ich meine!