Hallo,
ich habe mich um die GUI von Java besser kennen zu lernen an eine "einfache" Aufgabe gewagt. Ich gebe Zahlen in ein Sudokufeld ein und dann soll mir das gelöste Sudoku ausgegeben werden. Ich dachte, ich hätte den Code für die Ausgabe angepasst aber ich mache etwas falsch. Auf dem Bild sieht man links die Eingabe und rechts die Ausgabe
Und bitte, meinen Quellcode wollte ich eigentlich nie jemandem zeigen, daher ist die Namensgebung sehr inkonsequent.
Eingabe:
Ausgabe:
Ich nehme an, es liegt an der fehlenden Ausführung von paintComponents. Aber alle Versuche mit repaint() meinerseits zeigten keine Wirkung. Ich weiß, wie nervig fremder Code sein kann, wenn es zuviel ist, einfach nicht antworten ich versuch mich weiter dran.
MfG, Tim
ich habe mich um die GUI von Java besser kennen zu lernen an eine "einfache" Aufgabe gewagt. Ich gebe Zahlen in ein Sudokufeld ein und dann soll mir das gelöste Sudoku ausgegeben werden. Ich dachte, ich hätte den Code für die Ausgabe angepasst aber ich mache etwas falsch. Auf dem Bild sieht man links die Eingabe und rechts die Ausgabe
Und bitte, meinen Quellcode wollte ich eigentlich nie jemandem zeigen, daher ist die Namensgebung sehr inkonsequent.
Eingabe:
Java:
package sudokuExtern;
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import sudokuIntern.SudokuEinzelfeld;
import sudokuIntern.SudokuSpielfeld;
public class SudokuEingabeGUI extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
ImageIcon a = new ImageIcon(this.getClass().getResource("sudoku.jpg"));
static SudokuEingabeGUI pan = new SudokuEingabeGUI();
private static SudokuEinzelfeld [][] loesung;
public SudokuEingabeGUI() {
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Composite oldComp = g2d.getComposite();
Composite alphaComp = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 0.3f);
g2d.setComposite(alphaComp);
g2d.drawImage(a.getImage(), 0, -3, this.getWidth(), this.getHeight(),
this);
g2d.setComposite(oldComp);
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setTitle("Sudoku Solver");
pan = new SudokuEingabeGUI();
pan.add(new Buttonpanel());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 340);
f.setResizable(false);
f.add(pan);
f.pack();
f.setVisible(true);
// f.setIgnoreRepaint(true);
}
public void setLoesung(SudokuEinzelfeld [][] loesung) {
SudokuEingabeGUI.loesung = loesung;
SudokuAusgabeGui ausgabe = new SudokuAusgabeGui(loesung);
//ausgabe.zeichne();
}
static SudokuEinzelfeld [][] getLoesung() {
return loesung;
}
static class Buttonpanel extends JPanel {
JTextField[] alle81Felder = new JTextField[81];
JPanel jPanel1 = new JPanel();
ActionListener goButtonListener = new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(alle81Felder[1].getText());
int[][]array = new int[9][9];
int zeilenCounter=0;
int spalten = 0;
int i = 0;
while(zeilenCounter<9 && i < alle81Felder.length ) {
if(spalten == 9 && zeilenCounter<8){
zeilenCounter++;
spalten=0;
}
else if(spalten == 9 && zeilenCounter>=8){
spalten=0;
}
if(alle81Felder[i].getText().isEmpty()){
array[zeilenCounter][spalten] = 0;
}
else {
try{
array[zeilenCounter][spalten] = Integer.parseInt(alle81Felder[i].getText());
}
catch (NumberFormatException e1) {
JFrame warning = new JFrame("FEHLER");
warning.setSize(100,50);
JPanel warningPanel = new JPanel();
JLabel warningLabel = new JLabel("FALSCHE EINGABE");
warning.add(warningLabel);
warning.pack();
warning.show();
e1.printStackTrace();
break;
}
}
spalten++;
i++;
}
SudokuSpielfeld ssf = new SudokuSpielfeld(array, pan);
ssf.backTrack(ssf);
}
};
public Buttonpanel() {
jPanel1.setLayout(new GridBagLayout());
jPanel1.setSize(300, 340);
// Buttons initialisieren
for (int i = 0; i < alle81Felder.length; i++) {
alle81Felder[i] = new JTextField(1);
alle81Felder[i].setText("");
}
int counterZeile = 0;
int counterSpalte = 0;
for (int i = 0; i < alle81Felder.length; i++) {
if (counterSpalte == 9) {
counterZeile++;
counterSpalte = 0;
}
jPanel1.add(alle81Felder[i], new GridBagConstraints(
counterSpalte,counterZeile,1,1,0,0,
GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL, new Insets(4, 4, 4, 4),
0, 0));
counterSpalte++;
}
JButton start = new JButton("GO");
start.addActionListener(goButtonListener);
jPanel1.add(start, new GridBagConstraints(0, counterZeile + 1,
GridBagConstraints.REMAINDER, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.REMAINDER,
new Insets(4, 4, 4, 4), 0, 0));
jPanel1.setOpaque(false);
add(jPanel1);
this.setOpaque(false);
}
}
}
Ausgabe:
Java:
package sudokuExtern;
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import sudokuIntern.SudokuEinzelfeld;
public class SudokuAusgabeGui extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
ImageIcon a = new ImageIcon(this.getClass().getResource("sudoku.jpg"));
private static SudokuEinzelfeld[][] loesung;
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Composite oldComp = g2d.getComposite();
Composite alphaComp = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 0.3f);
g2d.setComposite(alphaComp);
g2d.drawImage(a.getImage(), 0, -3, this.getWidth(), this.getHeight(),
this);
g2d.setComposite(oldComp);
}
//Konstruktor
public SudokuAusgabeGui(SudokuEinzelfeld[][] loesung) {
ImageIcon a = new ImageIcon(this.getClass().getResource("sudoku.jpg"));
this.loesung = loesung;
repaint();
zeichne();
}
void zeichne() {
JFrame f = new JFrame();
f.setTitle("Sudoku Solved!");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 340);
f.setResizable(false);
f.add(new Loesungspanel());
f.pack();
f.setVisible(true);
}
static class Loesungspanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
public Loesungspanel() {
//Zahlen uebertragen
JTextField[] alle81Felder = new JTextField[81];
JPanel jPanel1 = new JPanel();
jPanel1.setLayout(new GridBagLayout());
jPanel1.setSize(300, 340);
int spalten = 0;
for (int zeile = 0; zeile < alle81Felder.length; zeile++) {
if(zeile % 9 == 0 && zeile > 0){
spalten++;
}
String zahl = Integer.toString(loesung[zeile%9][spalten].getAktuelleZahl());
alle81Felder[zeile] = new JTextField(1);
alle81Felder[zeile].setText(zahl);
}
int counterZeile = 0;
int counterSpalte = 0;
for (int i = 0; i < alle81Felder.length; i++) {
if (counterSpalte == 9) {
counterZeile++;
counterSpalte = 0;
}
jPanel1.add(alle81Felder[i], new GridBagConstraints(
counterSpalte, counterZeile, 1, 1, 0, 0,
GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL, new Insets(4, 4, 4, 4),
0, 0));
counterSpalte++;
}
jPanel1.setOpaque(false);
add(jPanel1);
this.setOpaque(false);
}
}
}
Ich nehme an, es liegt an der fehlenden Ausführung von paintComponents. Aber alle Versuche mit repaint() meinerseits zeigten keine Wirkung. Ich weiß, wie nervig fremder Code sein kann, wenn es zuviel ist, einfach nicht antworten ich versuch mich weiter dran.
MfG, Tim
Zuletzt bearbeitet von einem Moderator: