Gitter in Sudoko-Anzeige

timbeau

Gesperrter Benutzer
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:
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:

Marco13

Top Contributor
Ziemlich unaufgeräumt. Für so ein Graues Gitter braucht man eigentlich auch kein Image. Das kann man ja per Hand malen. Im Zweifelsfall ein paar "Border"s um einzelne Unterpanel machen. Aber ganz nebenbei: Ich sehe im Moment nicht, wo dieses ImageIcon 'a' überhaupt verwendet wird... ?!
 

timbeau

Gesperrter Benutzer
Hi MArco, ja tut mir leid mit der Ordnung :oops:

Das Image wird in der paintComponent-Methode verwendet.

Das würde ich auch gerne erstmal beibehalten, da blick ich nämlich gerade durch. Jetzt wieder Zeichen erfordert weitere Studien ;-)

Die kommen noch aber es scheint ja bei der Eingabe auch zu gehen.
 

Marco13

Top Contributor
Oh ja, ich hatte nur nach "a " und " a" gesucht - ist halt scheiße mit solchen Variablennamen ;) Ein KSKB würde das ganze erheblich beschleunigen...
 

timbeau

Gesperrter Benutzer
Hi, ein kurzes SKB geht leider nicht :D

Oder andersrum gesagt, ich kann mich heute mal dran setzen. Aber letzendlich muss die Eingabe der Ausgabe ein int[9][9] übergeben.
 

Marco13

Top Contributor
Kommt drauf an, wie ... ach naja.

Im SudokuAusgabeGui ist paintComponent überschrieben. Dieses Panel (SudokuAusgabeGui) wird aber nirgendwo angezeigt. Es wird nur ein neuer Frame erstellt, in dem dann das Loesungspanel angezeigt wird. DORT müßte paintCompnent überschrieben sein. Aber das ist nur Symptombekämpfung - orderntlicher wird es dadurch nicht.
 

timbeau

Gesperrter Benutzer
Aller Anfang ist schwer. Danke dir, ich werde es testen.

Yeah, das "Symptom" ist weg, ich danke dir Marco. :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A 3D-Grafik 3D Gitter Darstellen AWT, Swing, JavaFX & SWT 1
K Swing JTable - vertikale Gitter-Linien AWT, Swing, JavaFX & SWT 2
C Spielfeld Gitter - Einzelne Zellen verändern AWT, Swing, JavaFX & SWT 18
G Layoutmanager mit festem Gitter AWT, Swing, JavaFX & SWT 6
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
kodela Swing Anzeige des Warten-Cursors AWT, Swing, JavaFX & SWT 8
kodela Verspätete Anzeige in Textfeldern AWT, Swing, JavaFX & SWT 8
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
F Design-Anzeige im Windowbuilder AWT, Swing, JavaFX & SWT 3
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
D JavaFX Control zur Anzeige von eBooks AWT, Swing, JavaFX & SWT 5
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
V JWindow: Falsche Anzeige auf Ubuntu AWT, Swing, JavaFX & SWT 2
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
P Swing Problem mit der Anzeige AWT, Swing, JavaFX & SWT 12
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
S Anzeige von Beschleunigungswerten AWT, Swing, JavaFX & SWT 2
S Anzeige eines JWindows AWT, Swing, JavaFX & SWT 3
N jcomboBox anderer Wert als Anzeige AWT, Swing, JavaFX & SWT 6
B Swing Java crashed nach Anzeige JOptionePane AWT, Swing, JavaFX & SWT 20
S Probleme mit Anzeige von JComboBox AWT, Swing, JavaFX & SWT 2
J Anzeige AWT, Swing, JavaFX & SWT 5
F Verzögerung bei der ersten Anzeige AWT, Swing, JavaFX & SWT 6
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing Anzeige während eines Ladevorganges AWT, Swing, JavaFX & SWT 6
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
C SWT SWT Browser anzeige bug AWT, Swing, JavaFX & SWT 3
A Einschreiten vor anzeige eines Frames AWT, Swing, JavaFX & SWT 26
P JTree - Explorer mit nur eingeschränkter Anzeige AWT, Swing, JavaFX & SWT 17
J Verzögerung bei Änderungen der Anzeige abwarten AWT, Swing, JavaFX & SWT 5
T SWT Keine Anzeige der Widgets nach Comboauswahl AWT, Swing, JavaFX & SWT 2
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
B SWT Textdatei Lesen und Anzeige in View - Zeichensatzproblem AWT, Swing, JavaFX & SWT 4
hdi JTree: interne Daten OK, Anzeige schwarze Magie AWT, Swing, JavaFX & SWT 2
R Anzeige der Aktivität AWT, Swing, JavaFX & SWT 3
S Splash Screen / "Loading" Anzeige im Programm AWT, Swing, JavaFX & SWT 27
S JTree - Anzeige des Knotennamen ändern AWT, Swing, JavaFX & SWT 2
B JList Anzeige aktualisieren (Models) AWT, Swing, JavaFX & SWT 2
G Keine Anzeige des Balkens AWT, Swing, JavaFX & SWT 3
C JTable aktualisiert die Anzeige nicht AWT, Swing, JavaFX & SWT 2
G Anzeige schwierigkeiten AWT, Swing, JavaFX & SWT 3
G Problem mit Anzeige von HTML AWT, Swing, JavaFX & SWT 5
P JRE 6 -> ToolTip & mnemonic Anzeige AWT, Swing, JavaFX & SWT 4
G JComboBox - Anzeige mit Wert verknüpfen AWT, Swing, JavaFX & SWT 3
G Anzeige Problem AWT, Swing, JavaFX & SWT 4
D Anzeige eines Bildes: JPanel oder JLabel ? AWT, Swing, JavaFX & SWT 3
T dynamische anzeige? AWT, Swing, JavaFX & SWT 4
W JList Anzeige erneuern AWT, Swing, JavaFX & SWT 4
P JMenuBar und JToolBar Anzeige Probleme AWT, Swing, JavaFX & SWT 5
T JComboBox anzeige AWT, Swing, JavaFX & SWT 6
F Anzeige von JPanel AWT, Swing, JavaFX & SWT 3
M JTree und Anzeige des entsprechenden Panels AWT, Swing, JavaFX & SWT 5
K Probleme mit der Anzeige eines einzigen Nodes in einem JTree AWT, Swing, JavaFX & SWT 9
S SWT-Widgets für Anzeige-Elemente AWT, Swing, JavaFX & SWT 3
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2
M GUI mit Swing erst nach Maximieren richtige Anzeige AWT, Swing, JavaFX & SWT 2
S Anzeige der Benutzeroberfläche verzögern AWT, Swing, JavaFX & SWT 10
G Anzeige von JTextField erneuern AWT, Swing, JavaFX & SWT 12
P DefaultTreeCellEditor -> Anzeige Probleme AWT, Swing, JavaFX & SWT 3
swek Flackernde Anzeige AWT, Swing, JavaFX & SWT 4
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
A JTree-Anzeige filtern AWT, Swing, JavaFX & SWT 7
R Anfängerfrage:anzeige von Gui elementen AWT, Swing, JavaFX & SWT 2
W Anzeige von anderen Bildformaten: BMP, TIFF, PCX AWT, Swing, JavaFX & SWT 5
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
G Komponente zur Anzeige einer Textdatei. AWT, Swing, JavaFX & SWT 10
G JList: Anzeige von null-Werten verhindern AWT, Swing, JavaFX & SWT 3
I Problem mit korrekter Anzeige AWT, Swing, JavaFX & SWT 2
G Gibts ne Klasse zur Anzeige von Ziffern? AWT, Swing, JavaFX & SWT 4
S Anzeige-Wirrwar in JScrollbar AWT, Swing, JavaFX & SWT 3
B Anzeige eines SpinnerNumberModel AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben