Ich habe einen JTable auf einem JFrame gemacht und möchte, dass wenn ich in eine Tabellenzeile klicke, dort ein"X" erscheint. Mein Code:
Meine Idee war, dass wenn ich die Maus drücke und diese sich auf einer tabellenzeile befindet, dass die Koordinaten in rowIndex und colIndex gespeichert werden. An dieser Stelle soll dann mit der Methode "setValueAt" der Wert "X" ins Feld gesetzt werden. Währenddessen läuft ein Thread, der die Tabelle alle 17Milisekunden neu erzeugt, um die Änderungen darzustellen. Die keyListener, die ich mal zum testen implementiert hatte, funktionieren. Auch das Jframe und die Tabelle werden dargestellt, nur wenn ich auf eine Tabellenzeile drücke, passiert nichts.
Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Graphics;
public class Fenster extends JFrame implements MouseListener,Runnable,KeyListener {
JTable table;
JPanel contentPane;
String[][]rowData=new String[3][3];
String[] columnNames = {
"Zeile1","Zeile2","Zeile3" };
public Fenster() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
addMouseListener(this);
addKeyListener(this);
Thread thread = new Thread(this);
thread.start();
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("X");
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
int rowIndex = table.getSelectedRow();
int colIndex = table.getSelectedColumn();
table.setValueAt("X", rowIndex, colIndex);
System.out.println("X");
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void run() {
while(true) {
table = new JTable(rowData, columnNames);
table.setVisible(true);
contentPane.add(table, BorderLayout.CENTER);
try {
Thread.sleep(17);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
System.out.println("Bewege dich hoch");
break;
case KeyEvent.VK_DOWN:
System.out.println("Bewege dich runter");
break;
case KeyEvent.VK_LEFT:
System.out.println("Bewege dich links");
break;
case KeyEvent.VK_RIGHT:
System.out.println("Bewege dich rechts");
break;
case KeyEvent.VK_SPACE:
System.out.println("Spring");
break;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
Meine Idee war, dass wenn ich die Maus drücke und diese sich auf einer tabellenzeile befindet, dass die Koordinaten in rowIndex und colIndex gespeichert werden. An dieser Stelle soll dann mit der Methode "setValueAt" der Wert "X" ins Feld gesetzt werden. Währenddessen läuft ein Thread, der die Tabelle alle 17Milisekunden neu erzeugt, um die Änderungen darzustellen. Die keyListener, die ich mal zum testen implementiert hatte, funktionieren. Auch das Jframe und die Tabelle werden dargestellt, nur wenn ich auf eine Tabellenzeile drücke, passiert nichts.