M
meintable
Gast
Hallo, guten Abend, ich hab da ein Problem mit einem JTable. Ich habe mir einen Frame
erstellt und dort ein BorderLayout erstellt. So, dann hab ich in den Westen mein erzeugtes
DefaultTableModel gepackt und in den Süden 4 Buttons, die jeweils eine Aktion im JTable
durchführen sollen. Z.B. soll wenn der Button 2 gedrückt wird in einer Zelle eine bestimmte
Zahl gesetzt werden, nur leider klappt das nicht so wie es soll mit diesem
setValueAt(Object aValue, int rows, int cols).
Desweiteren bekomme ich bei dieser Methode eine Fehlermeldung ohne Lösungstipp:
public void fireTableCellUpdated(int row, int column)
{
fireTableChanged(new TableModelEvent(this, row, row, column));
}
Ich hab jetzt schon an allem herumgetrickst, aber finde keine Lösungsmöglichkeit, dass das
JTable hier die Zahl, die auf Knopfdruck gesetzt werden soll auch setzt, bzw im JTable dann
auch anzeigt. Kann mir jemand dabei helfen, das hinzubekommen, oder sich zumnidest mal
meinen Code anschauen und einfügen was ich ändern muss bzw. Tipps geben was daran falsch
ist. Danke
Edit by Beni: Codetags repariert
erstellt und dort ein BorderLayout erstellt. So, dann hab ich in den Westen mein erzeugtes
DefaultTableModel gepackt und in den Süden 4 Buttons, die jeweils eine Aktion im JTable
durchführen sollen. Z.B. soll wenn der Button 2 gedrückt wird in einer Zelle eine bestimmte
Zahl gesetzt werden, nur leider klappt das nicht so wie es soll mit diesem
setValueAt(Object aValue, int rows, int cols).
Desweiteren bekomme ich bei dieser Methode eine Fehlermeldung ohne Lösungstipp:
public void fireTableCellUpdated(int row, int column)
{
fireTableChanged(new TableModelEvent(this, row, row, column));
}
Ich hab jetzt schon an allem herumgetrickst, aber finde keine Lösungsmöglichkeit, dass das
JTable hier die Zahl, die auf Knopfdruck gesetzt werden soll auch setzt, bzw im JTable dann
auch anzeigt. Kann mir jemand dabei helfen, das hinzubekommen, oder sich zumnidest mal
meinen Code anschauen und einfügen was ich ändern muss bzw. Tipps geben was daran falsch
ist. Danke
Code:
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.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
public class FrameTable extends JFrame implements ActionListener
{
private class MeinWindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent arg0)
{
System.exit(0);
}
}
private String[] columnNamen = { "Möglichkeit 1", "Möglichkeit 2", "Möglichkeit 3,
Möglichkeit 4"};
private Object[][] Zahlen = {
{ new Integer(12), new Integer(2), new Integer(4), new Integer(6)
},
{ new Integer(12), new Integer(4), new Integer(13), new Integer(9)
},
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) },
{ new Integer(0), new Integer(0), new Integer(0), new Integer(0) }
};
private DefaultTableModel tableModelM;
private JButton b1, b2, b3, b4;
private JComponent jc = (JComponent)getContentPane();
FrameTable()
{
super();
setTitle("FrameTable");
setSize(800, 600);
initLayout();
setLocationRelativeTo(null);
addWindowListener(new MeinWindowListener());
setVisible(true);
setResizable(true);
}
void initLayout()
{
jc.setLayout( new BorderLayout( ) );
// JTable erstellen
tableModelM = new DefaultTableModel(Zahlen, columnNamen );
JTable tableZahlen = new JTable(tableModelM);
tableZahlen.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
// tableSpieler einem Container zuführen
JScrollPane scrollM = new JScrollPane (tableZahlen);
scrollM.setPreferredSize(new Dimension(300,300));
//West
JPanel wPnl = new JPanel();
wPnl.add("Center", scrollM);
jc.add("West", wPnl);
//South
JButton b1 = new JButton("2");
b1.addActionListener(this);
JButton b2 = new JButton("4");
b2.addActionListener(this);
JButton b3 = new JButton("6");
b3.addActionListener(this);
JButton b4 = new JButton("8");
b4.addActionListener(this);
JPanel sPnl = new JPanel();
sPnl.add(b1);
sPnl.add(b2);
sPnl.add(b3);
sPnl.add(b4);
jc.add("South", sPnl);
}
public int getColumnCount()
{
return columnNamen.length;
}
public int getRowCount()
{
return Zahlen.length;
}
public String getColumnName(int col)
{
return columnNamen[col];
}
public Object getValueAt(int row, int col)
{
return Zahlen[row][col];
}
public Class getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col)
{
if (col < 4)
{
return false;
} else
{
return true;
}
}
public void setValueAt(Object aValue, int rows, int cols)
{
Zahlen[rows][cols] = aValue;
fireTableCellUpdated(rows, cols);
}
public void fireTableCellUpdated(int row, int column)
{
fireTableChanged(new TableModelEvent(this, row, row, column));
}
public void tableChanged(TableModelEvent e)
{
int row = e.getFirstRow();
int column = e.getColumn();
tableModelM = (DefaultTableModel)e.getSource();
String columnName = tableModelM.getColumnName(column);
Object data = tableModelM.getValueAt(row, column);
}
public static void main(String[] args)
{
FrameTable frame = new FrameTable();
frame.setLocation(150, 90);
frame.setSize(600,500);
frame.setResizable(true);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("2"))
{
System.out.println(getValueAt(1, 1));
//setValueAt(new Integer(2), 1, 1) ;
}
if( e.getActionCommand().equals("4") )
{
setValueAt(new Integer(4), 2, 2) ;
}
if( e.getActionCommand().equals("6") )
{
setValueAt(new Integer(6), 2, 6) ;
}
if( e.getActionCommand().equals("8") )
{
setValueAt(new Integer(8), 1, 8) ;
}
}
}
Edit by Beni: Codetags repariert