S
Supersimsonfahrer
Gast
Hey Leute,
Wie kann ich die Farbe einer ganz bestimmten Zelle in einer JTable zur laufzeit ändern?
Beispielsweise wenn ein Button geklickt wird.
Das Prog stellt die Sudoku-Problematik dar,
und ich will die zellfarbe auf rot setzen, wenn ein konflikt mit den Benutzereingaben auftritt.
In Codezeile 103 wäre eine dieser stellen...
könnt ihr mir helfen???
Wie kann ich die Farbe einer ganz bestimmten Zelle in einer JTable zur laufzeit ändern?
Beispielsweise wenn ein Button geklickt wird.
Das Prog stellt die Sudoku-Problematik dar,
und ich will die zellfarbe auf rot setzen, wenn ein konflikt mit den Benutzereingaben auftritt.
In Codezeile 103 wäre eine dieser stellen...
könnt ihr mir helfen???
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
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.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class Sudoku extends JFrame {
public boolean fertig = false;
private JTable tabelle;
private int array[][]= new int[9][9];
private Sudoku(){
String wert[][] = new String[9][9];
String spalte[]= {"1","2","3","4","5","6","7","8","9"};
for (int i=0; i<9; i++) {
for (int j=0; j<9; j++) {
wert[i][j]="0";
}
}
JButton btnPruefen = new JButton("Prüfen");
JButton btnLoesen = new JButton("Lösen");
JButton btnLoeschen = new JButton("Löschen");
JPanel controll = new JPanel();
controll.setLayout(new FlowLayout());
controll.add(btnPruefen);
controll.add(btnLoesen);
controll.add(btnLoeschen);
tabelle = new JTable(wert, spalte);
tabelle.setPreferredSize(new Dimension(200,150));
//Zellenausrichtung
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
for (int i=0; i<9; i++) {
tabelle.getColumnModel().getColumn(i).setCellRenderer(renderer);
}
getContentPane().add(tabelle, BorderLayout.CENTER);
getContentPane().add(controll, BorderLayout.SOUTH);
setTitle("Sudoku");
pack();
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(0);
}
});
btnPruefen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
zellenPruefen();
}
});
btnLoesen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loesen();
}
});
btnLoeschen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loeschen();
}
});
}
private boolean zellenPruefen(){
boolean check = true;
int inhalt, a, b = 5;
for(int x = 0; x<9; x++){
for(int y = 0; y<9; y++){
inhalt = Integer.parseInt((String)tabelle.getValueAt(x,y).toString());
if(inhalt >=0 && inhalt <= 9 ){
//quadrat überprüfen
a = x / 3 + 1;
b = y / 3 + 1;
if(Integer.parseInt((String)tabelle.getValueAt(x,y).toString()) == inhalt & (a * 3 - 1 != x) & (b * 3 - 1 != y)){
check = false;
/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
hier soll zellfarbe geändert werden
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
}
//waagerecht prüfen
for(int j=0; j<9; j++){
if(Integer.parseInt((String)tabelle.getValueAt(j,y).toString()) == inhalt & j != x){
check = false;
//farbe ändern
}
}
for(int k=0; k<9; k++){
if(Integer.parseInt((String)tabelle.getValueAt(x,k).toString()) == inhalt & k != y){
check = false;
//farbe ändern
}
}
}
}
}
return check;
}
private void loesen(){
for (int x =0; x<9; x++){
for (int y =0; y<9; y++){
array[x][y]=Integer.parseInt((String)tabelle.getValueAt(x,y).toString());
}
}
fertig = false;
sudokuRek(0, 0);
}
private void sudokuRek(int x, int y){
boolean check;
int a = 0, b = 0;
Thread.yield(); // erlaube AktivitÄaten anderer Threads
if(array[x][y] == 0){
for(int i = 1; i <= 9; i++){
if(fertig == true){
break;
}
check = true;
//quadrat überprüfen
a = x / 3 + 1;
b = y / 3 + 1;
if(array[a * 3 - 1][ b * 3 - 1] == i){check = false;}
if(array[a * 3 - 2][ b * 3 - 1] == i){check = false;}
if(array[a * 3 - 3][ b * 3 - 1] == i){check = false;}
if(array[a * 3 - 1][ b * 3 - 2] == i){check = false;}
if(array[a * 3 - 2][ b * 3 - 2] == i){check = false;}
if(array[a * 3 - 3][ b * 3 - 2] == i){check = false;}
if(array[a * 3 - 1][ b * 3 - 3] == i){check = false;}
if(array[a * 3 - 2][ b * 3 - 3] == i){check = false;}
if(array[a * 3 - 3][ b * 3 - 3] == i){check = false;}
for(int j=0; j<9; j++){
if(array[j][y] == i){check = false;}
}
for(int k=0; k<9; k++){
if(array[x][k] == i){check = false;}
}
if(check == true){
array[x][y]=i;
if(x < 8){sudokuRek(x+1, y);}
if(x == 8 & y < 8){sudokuRek(0,y+1);}
if(x == 8 & y == 8){ausgabe();fertig = true;}
array[x][y]=0;
}//ende check
}//ende for bis 9
}//ende array = 0
else if (array[x][y]>0) {
if(x < 8){sudokuRek(x+1, y);}
else if(x == 8 & y < 8){sudokuRek(0,y+1);}
else if(x == 8 & y == 8){
ausgabe();
fertig = true;
}
}
}
private void ausgabe(){
for (int x =0; x<9; x++){
for (int y =0; y<9; y++){
tabelle.setValueAt(String.valueOf(array[x][y]),x,y);
}
}
}
private void loeschen(){
for (int x =0; x<9; x++){
for (int y =0; y<9; y++){
tabelle.setValueAt("0",x,y);
}
}
}
public static void main(String[] args){
new Sudoku();
}
}