Swing Sudoku GUI - Problem mit MaskFormatter

Jannik

Mitglied
Hallo zusammen,

ich habe ein Problem mit den MaskFormattern von JFormattedTextfield'ern. Bzw vielleicht liegt es gar nicht daran.

Folgendes Prinzip: Wie ihr schon im Thread Thema lesen könnt sind wir dabei eine Sudoku GUI zu programmieren. Der Algorithmus werkelt einwandfrei, es geht nur noch um die GUI.
Wir haben uns dazu entschlossen, jedes einzelne Sudoku-Feld in ein JFormattedTextfield zu schreiben. Diese 81 JFormattedTextfielder werden in ein Array geschrieben, der Name dieses Arrays ist textfields[][], es ist zweidimensional. Bei der ersten Erstellung wird die Methode createTable() aufgerufen, die Textfelder mit createTextfields erstellt. Hierbei wird gleich die Maske zugewiesen, die dann auch einwandfrei funktioniert. Jetzt aber das Problem: möchte ich ein neues Sudoku-Feld erzeugen, sprich die Funktion shuffle() wird aufgerufen, welche ausschließlich die Inhalte der Textfelder ändert, ist die Maske "futsch". Ich erstelle keine neuen Textfelder, was wahrscheinlich euer erster Gedanke ist. Komischerweise wenn ich einmal etwas in dieses Textfeld geschrieben habe (etwas unerlaubtes laut Maske), es dann verlasse und auch richtigerweise vom Textfeld auch nicht angenommen wird, funktioniert die Maske dann aber beim zweiten Editierungsversuch, wie zu Anfang, als ich das Feld neu erstellt habe. Das heißt also, die Maske ist irgendwie noch da, halt nur nicht beim ersten Editierungsversuch eines jeden Feldes. Wir wissen nicht weiter, vielleicht ihr ja.

Vielen Dank an euch jetzt schon einmal.

Ach, den Code bin ich euch ja noch schuldig:
Java:
package de.szut.dqi;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.NumberFormat;

import javax.swing.AbstractAction;

import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.MaskFormatter;
import javax.swing.text.NumberFormatter;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class GUImitPanel extends javax.swing.JFrame {
	private JMenuBar jMenuBar1;
	private AbstractAction newAction;
	private JPanel jPanel1;
	private JMenuItem New;
	private JMenu jMenu1;
	private JMenu jMenu2;
	private Sudoku sudoku = new Sudoku();
	private JFormattedTextField[][] textfields = new JFormattedTextField[9][9];
	private Integer[][] gameBoard = new Integer[9][9];
	

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				GUImitPanel inst = new GUImitPanel();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
				
			}
		});
	}
	
	public GUImitPanel() {
		super();
		
		initGUI();
	}
	
	private void initGUI() {
		try {
			GroupLayout thisLayout = new GroupLayout((JComponent)getContentPane());
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				jPanel1 = new JPanel();
				GridLayout jPanel1Layout = new GridLayout(3, 3);
				jPanel1Layout.setColumns(1);
				jPanel1Layout.setHgap(4);
				jPanel1Layout.setVgap(4);
				jPanel1.setLayout(jPanel1Layout);
				//jPanel1.setBackground(Color.BLUE);
				setMinimumSize(new Dimension (400, 400));
				setMaximumSize(new Dimension (600, 600));
				
				
				createTable();
				
				

			}
			thisLayout.setVerticalGroup(thisLayout.createSequentialGroup()
				.addComponent(jPanel1, 0, 248, Short.MAX_VALUE));
			thisLayout.setHorizontalGroup(thisLayout.createSequentialGroup()
				.addComponent(jPanel1, 0, 392, Short.MAX_VALUE));
			{
				jMenuBar1 = new JMenuBar();
				setJMenuBar(jMenuBar1);
				{
					jMenu1 = new JMenu();
					jMenu2 = new JMenu();
					jMenuBar1.add(jMenu1);
					jMenuBar1.add(jMenu2);
					jMenu1.setText("Game");
					{
						New = new JMenuItem();
						jMenu1.add(New);
						New.setText("New");
						New.setAction(getNewAction());
					}
					jMenu2.setText("Help");
					
				}
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private JPanel[][] createPanels() {
		JPanel[][] panels = new JPanel[3][3];
		
		for (int x = 0; x < 3; x++) {
			for (int y= 0; y < 3; y++) {
				panels[x][y] = new JPanel();
				GridLayout jPanel1Layout = new GridLayout(3, 3);
				panels[x][y].setLayout(jPanel1Layout);
				panels[x][y].setBorder(BorderFactory.createLineBorder(Color.BLACK));
			}
		}
		return panels;
	}
	
	private void createTextfields() {
		try {
			MaskFormatter mask = new MaskFormatter("#");
			mask.setValidCharacters("123456789");
			
			for (int x = 0; x < 9; x++) {
				for (int y = 0; y < 9; y++) {
					textfields[x][y] = new JFormattedTextField(mask);
					textfields[x][y].setHorizontalAlignment(JTextField.CENTER);
					textfields[x][y].setFont(new java.awt.Font("Dialog", 0, 28));
					
				}
			} 
		} catch (Exception e) {
				System.out.println(e);
			}
			
	}
	
	private void createTable() {
		
		
		
		sudoku.shuffle();
		gameBoard = sudoku.getGameBoard();
		JPanel[][] panels = createPanels(); 
		createTextfields();
		
		try {
			
					
		
			for (int x = 0; x < 9; x++) {
				for (int y = 0; y < 9; y++) {
											
					if (gameBoard[x][y] != null) {
						textfields[x][y].setText(gameBoard[x][y].toString());
						textfields[x][y].setEditable(false);
						textfields[x][y].setBackground(Color.LIGHT_GRAY);
					} else {
						
						textfields[x][y].setEditable(true);
					}
					
		
				}				
			}

		
			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					jPanel1.add(panels[i][j]);
					for (int x = 0; x < 3; x++) {
						for (int y = 0; y < 3; y++) {
							panels[i][j].add(textfields[x+i*3][y+j*3]);
						}					
					}
				}			
			}
			
		} catch (Exception e) {
			System.out.println(e);
		}
	}
	
	private void shuffle() {
		System.out.println("hallo");
		sudoku.shuffle();
		gameBoard = sudoku.getGameBoard();
		//createTextfields();
		System.out.println(textfields[0][0].getText().toString());
		for (int x = 0; x < 9; x++) {
			for (int y = 0; y < 9; y++) {	
				
					
				if (gameBoard[x][y] != null) {
					System.out.println("if");
					textfields[x][y].setText(gameBoard[x][y].toString());
					textfields[x][y].setEditable(false);
					textfields[x][y].setBackground(Color.LIGHT_GRAY);
					
				} else {
					System.out.println("else");
					textfields[x][y].setText("leer");
					textfields[x][y].setEditable(true);
					textfields[x][y].setBackground(Color.WHITE);
					
				}
			
				textfields[x][y].setHorizontalAlignment(JTextField.CENTER);
				textfields[x][y].setFont(new java.awt.Font("Dialog", 0, 28));
				
					
			}				
			}
		
		
	}
	
	private AbstractAction getNewAction() {
		if(newAction == null) {
			newAction = new AbstractAction("New", null) {
				public void actionPerformed(ActionEvent evt) {
					shuffle();
				}
			};
		}
		return newAction;
	}

}

Liebe Grüße aus Bremen
 

Marco13

Top Contributor
Interessant. Kann sein dass es im Dunstkreis dieser Funktionen noch ein paar Bugs gibt, kannst dir mal Bug ID: 6256410 JFormattedTextField looses its mask if using setValue on an invalid value und verwandte genauer ansehen. In diesem Fall könnte das Problem aber schon behoben sein, wenn man in 'shuffle' statt des
textfields[x][y].setText("leer");
ein
textfields[x][y].setValue(null);
schreibt, zumindest schien's dann hier erstmal zu funktionieren.
 

Jannik

Mitglied
Hallo Marco13,

"leer" stand dort noch aus Debug-Zwecken, mit null existiert genau das Problem weiterhin.

Aber trotzdem danke dir!

Liebe Grüße
 

Marco13

Top Contributor
Auch bei setValue(null) !? Bei setText(null) hat es hier auch nicht funktioniert, bei setValue(null) schon. Hab aber selbst noch nicht intensiv mit FormattedTextFields und MaskFormattern rumgebastelt, deswegen kann ich nicht mit dem Finger auf "den" Grund zeigen....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Sudoku mittels Backtracking Problem Allgemeine Java-Themen 6
M Problem bei Sudoku Allgemeine Java-Themen 21
J Sudoku generieren Schwierigkeitsgrad Allgemeine Java-Themen 3
J Sudoku Kommandozeile Allgemeine Java-Themen 13
J Sudoku Löser Allgemeine Java-Themen 10
B Sudoku-Block-Prüfung Allgemeine Java-Themen 1
B Sudoku-Überprüfer Allgemeine Java-Themen 1
K Sudoku-Solver - Backtracking Allgemeine Java-Themen 2
F Sudoku-Löser Allgemeine Java-Themen 6
E Threads Sudoku Threads Allgemeine Java-Themen 8
J Laufzeitberechnung - Sudoku Backtracking Allgemeine Java-Themen 7
F rekursiver Aufruf (Sudoku und Guice) Allgemeine Java-Themen 19
truesoul Sudoku programmieren Allgemeine Java-Themen 23
C Sudoku und KeyListener Allgemeine Java-Themen 2
V Strings aus externen Dateien Einlesen (Sudoku) Allgemeine Java-Themen 25
B sudoku backtrackingproblem Allgemeine Java-Themen 2
S Algorithmus für Sudoku Allgemeine Java-Themen 17
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben