Swing bzgl. Tableskalierung/Darstellung einer Matrix

Wolfone

Mitglied
Hallo allerseits,

ich bin gerade dabei mich nach längerer Pause wieder ein bisschen in Java einzufuchsen und wollte zu Beginn einen Sudokulöser erstellen.

Bis jetzt habe ich das bezüglich des Interface allerdings enorm unelegant gelöst, indem ich für die Einträge eine Reihe von Textfeldern benutzt habe.

Das sieht aber erstens nicht schön aus und ist zweitens nicht gut dynamisch zu verändern, falls man mal größere Dimensionen haben möchte.

Ich dachte mir also, dass ich vielleicht ein JTable verwenden könnte, sodass ich nicht 81 mal 4 Zeilen Code habe nur um eine Eingabemöglihckeit zu bieten.
Wenn ich dort aber ein 9x9 DefaultTableModel hinzufüge (wird es hinzugefügt oder ersetzt es?) würde ich das gerne auf die größe meines JTables hochskalieren, sodass die Zellen auch den ganzen zur Verfügung stehenden Platz einnehmen, wozu mir google noch ncihts liefern konnte (vielleicht suche ich falsch...).

Insgesamt bin ich auch unsicher, ob das JTable eine gute Methode wäre, da meine Swing-Erfahrung noch sehr eingeschränkt ist.
Ich wäre also nicht nur froh für Tips bezüglich der Zellenskalierung, sondern auch offen für alternative Ansätze.

Beste Grüße
Wolf
 

Joose

Top Contributor
Ich dachte mir also, dass ich vielleicht ein JTable verwenden könnte, sodass ich nicht 81 mal 4 Zeilen Code habe nur um eine Eingabemöglihckeit zu bieten.
Ich finde die Idee mit dem JTable nicht gerade prickelnd.

Anstatt 81x4 Zeilen Code zu schreiben solltest du dir überlegen wie du es mit Methoden und Schleifen machen kannst ;)
Die 4 Zeilen Code in eine Methode geben -> Somit sind es schon nur mal 81 Zeilen
Und diese 81 Zeilen kann man auch noch reduzieren indem man Schleifen verwendet.

Wenn ich dort aber ein 9x9 DefaultTableModel hinzufüge (wird es hinzugefügt oder ersetzt es?) würde ich das gerne auf die größe meines JTables hochskalieren, sodass die Zellen auch den ganzen zur Verfügung stehenden Platz einnehmen, wozu mir google noch ncihts liefern konnte (vielleicht suche ich falsch...).

Das TableModel sollte nur die Daten halten und hat nichts mit der Anzeige des JTable Controls zu tun.
Damit diese den ganzen Platz einnimmt muss man es eben je nach verwendeten LayoutManager richtig hinzufügen.
 

Wolfone

Mitglied
Hallo Joose,

danke für deine Antwort. Ich hatte mir schon überlegt, das mit einer Schleife zu machen, bin da aber auf konzeptionelle Fragen gestoßen, die ich spontan nciht beantworten konnte, aber vielleicht kannst du mir da weiterhelfen.


Zunächst mal die sehr simple Lösung, die ich jetzt nach deinem Post gewählt habe:
Java:
public class Grid9x9 extends JFrame {

[...]
        contentPane.add(panel);
        panel.setLayout(new GridLayout(9, 9, 0, 0));
        for (int i=0;i<=80;i++){
            panel.add(new JTextField());
        }
    }
}

(Das ganze wird über ein Hauptfenster generiert, was ich als Lernmaterial/Spielwiese benutze.)
So regelt mir natürlich das GridLayout, dass das alles weitestgehend an mein Panel angepasst wird (obwohl mich noch die Ränder oben und unten stören).

Jetzt sind aber ja die JTextFields nicht eindeutig benannt. Meine Problem ist also, wie ich die jetzt gezielt ansprechen kann. Ich möchte ja aus den Eingaben (ungelöstes Sudoku) eine Matrix (als array) erzeugen, auf der ich dann rechnen kann.
Ich habe per google herausgefunden, dass es in Java keine dynamischen Variablennamen gibt.

Daher folgende Fragen:
- Gibt es da eine Best Practice um ein solches Verhalten zu erreichen?
- Kann ich die einzelnen TextFields in meinem Grid auch eindeutig identifizieren, wenn ich sie in einer solchen Minischleife wie oben nicht explizit definiere?


(Und falls du Zeit hast, würde ich gerne des Interesses wegen wissen, warum du das JTable für eine schlechte Idee hältst.)
 

Joose

Top Contributor
Speichere dir die Textfelder doch in einem entsprechenden (2d-)Array oder einer Liste ;)

Hinweis: Man erweitert eine Klasse um deren Funktionalität zu erweitern/anzupassen. Einem JFrame eine bestimmtes Layout verpassen ist keine Funktionalität ;) daher ist die Ableitung von JFrame eher falsch. (wird aber in fast allen tutorials so gezeigt, warum auch immer)
 

Wolfone

Mitglied
Ich schätze du meinst etwas in dieser Richtung:

Code:
[...]
JTextField[][] InputGrid = new JTextField[9][9];
        for (int i=0;i<=8;i++){
            for (int j=0;j<=8;j++){
                InputGrid[i][j] = new JTextField();
                panel.add(InputGrid[i][j]);   
            }
        }
[...]

Das funktioniert schonmal gut! Danke dir dafür :)

Da wirft sich jetzt allerdings die nächste Frage auf:

Netterweise legt das GridLayout die Textfelder ja genau in der Reihenfolge an, wie man das bei der Standardindizierung einer Matrix erwarten würde (sprich das linke obere Element mit 0,0 und das rechte untere mit 8,8); kann ich das theoretisch beeinflussen, sprich, dass mein Grid zum Beispiel von unten nach oben und von rechts nach links mit Inhalten befüllt wird?


Bzgl. des extends auf JFrame:

Du meinst also es wäre bessere Praxis einfach im Hauptfenster ein neues JFrame zu erzeugen und dort vor Ort alle Modifikationen vorzunehmen, verstehe ich das richtig? (Entschuldige bitte die Kettenfragen, die ergeben sich gerade erst aus dem Kontext.)

Viele Grüße
Wolf
 

Joose

Top Contributor
Netterweise legt das GridLayout die Textfelder ja genau in der Reihenfolge an, wie man das bei der Standardindizierung einer Matrix erwarten würde (sprich das linke obere Element mit 0,0 und das rechte untere mit 8,8); kann ich das theoretisch beeinflussen, sprich, dass mein Grid zum Beispiel von unten nach oben und von rechts nach links mit Inhalten befüllt wird?
Natürlich würde das funktionieren. Du musst für i und j die richtigen Startwerte wählen (bzw. auch die richtigen Abbruchbedingungen).
Am besten einfach mal mit Stift und Papier überlegen welche Startwerte welche Belegung erzeugen (Tipp: verwende nicht ein 9x9 Feld für deine Überlegungen es reichen auch 2x2 oder 3x3).

Du meinst also es wäre bessere Praxis einfach im Hauptfenster ein neues JFrame zu erzeugen und dort vor Ort alle Modifikationen vorzunehmen,..
Wie schon gesagt: Wenn du die Funktionalität des JFrames erweiterst dann ist eine deratige Ableitung schon richtig.
Wenn es nur darum geht Komponenten mittels Layout zu positionieren ist das keine Erweiterung der Funktionalität.
 

Wolfone

Mitglied
zu 1.:
Ich glaube zu verstehen, was du meinst. In eigenen Worten würde ich formulieren:

Das "Befüllungsschema" in Java bleibt zwar gleich, aber ich könnte mir bei Bedarf das mapping ändern, indem ich zum Beispiel die beiden obigen Schleifen nicht hochzählen, sondern runterlaufen lassen würde, womit ich das vorangegangene mapping sozusagen an der Diagonalen gespiegelt hätte.
Ist es das, was du meinst?

zu 2.: Check, Danke für den Hinweis. Ich werde versuchen das zu berücksichtigen.
 

Joose

Top Contributor
Das "Befüllungsschema" in Java bleibt zwar gleich, aber ich könnte mir bei Bedarf das mapping ändern,
Genau :)

indem ich zum Beispiel die beiden obigen Schleifen nicht hochzählen, sondern runterlaufen lassen würde,
Dir stehen vier Möglichkeiten zur Auswahl:
1) Beide Schleifen hochzählen lassen
2) Beide Schleifen runterzählen lassen
3) innere Schleife zählt hoch, äußere runter
4) innere Schleife zählt hoch, äußere runter

(welche Variante welches Mapping erzeugt kann ich dir nicht sagen, aber mit einem kleinen 3x3 Feld sollte sich das gut mit Papier&Stift rausfinden lassen)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
U Hilfestellung zu MVC-Umsetzung bzgl JTrees AWT, Swing, JavaFX & SWT 9
M Frage bzgl. Formular-Design. AWT, Swing, JavaFX & SWT 2
MiMa Darstellung von FXML ateien nicht korrekt (SceneBuilder) AWT, Swing, JavaFX & SWT 2
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Swing JTable, wie erreiche ich folgende Darstellung? AWT, Swing, JavaFX & SWT 10
M AWT LabelArray verschobene Darstellung AWT, Swing, JavaFX & SWT 2
B Transformation und Darstellung von Koordinaten AWT, Swing, JavaFX & SWT 5
N Swing Java Komponente zur Darstellung von klickbaren Links, die Java Funktionen ausführen können AWT, Swing, JavaFX & SWT 2
A Swing Darstellung von JComponents in Swing AWT, Swing, JavaFX & SWT 14
M Swing JTable drucken/Darstellung AWT, Swing, JavaFX & SWT 2
E Swing Darstellung einer Zeilenbar AWT, Swing, JavaFX & SWT 6
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
U Swing Problem bei der Darstellung "komplexer Objecte" in einer JList mit AbstractListModel: AWT, Swing, JavaFX & SWT 3
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
A Darstellung dauert zu lange. Wie rest verzögern? AWT, Swing, JavaFX & SWT 7
S LayoutManager Fehlerhafte Darstellung einer Statusleiste/Statusbar AWT, Swing, JavaFX & SWT 6
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
S Grafische Darstellung von signalen AWT, Swing, JavaFX & SWT 2
S jTable size und Text darstellung AWT, Swing, JavaFX & SWT 2
L SWT Darstellung des Datums in Textfeld? AWT, Swing, JavaFX & SWT 2
M SWT Probleme bei der Darstellung des "&"-Zeichens... AWT, Swing, JavaFX & SWT 3
E Darstellung komplexer Formen, z.B. gebogener Pfeil AWT, Swing, JavaFX & SWT 2
P Problem mit Darstellung von JButton(s) AWT, Swing, JavaFX & SWT 2
D Darstellung in Swing wie HTML? AWT, Swing, JavaFX & SWT 2
R Darstellung von JButton AWT, Swing, JavaFX & SWT 6
G Swing Darstellung JTable AWT, Swing, JavaFX & SWT 2
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
S Unterschiedliche Darstellung Java 5 und 6 AWT, Swing, JavaFX & SWT 7
B Probleme bei JPanel Darstellung AWT, Swing, JavaFX & SWT 6
M GBL - Darstellung gestreckt? AWT, Swing, JavaFX & SWT 3
P Applet darstellung von Textfeldern Problem AWT, Swing, JavaFX & SWT 3
O JComboBox andere Darstellung des Inhaltes + größe der Auswah AWT, Swing, JavaFX & SWT 11
M Swing mit Gtk - Fehlerhafte Darstellung AWT, Swing, JavaFX & SWT 3
S JTree - Darstellung von Ordnern rückwärts AWT, Swing, JavaFX & SWT 4
C Fragen zur Darstellung einer JTable mittels Renderer AWT, Swing, JavaFX & SWT 2
H Darstellung einer Kurve im Koordinatensystem AWT, Swing, JavaFX & SWT 8
T [gelöst] JFrame Grundlagen (Größe und Darstellung) AWT, Swing, JavaFX & SWT 6
G JTable dynamische Darstellung der ankommenden Daten AWT, Swing, JavaFX & SWT 19
G Darstellung von JComboBox AWT, Swing, JavaFX & SWT 14
S Gui Darstellung AWT, Swing, JavaFX & SWT 2
M Komische Sache bei der Darstellung auf einem JPanel AWT, Swing, JavaFX & SWT 5
S Swing Element für Explorer-Fenster darstellung AWT, Swing, JavaFX & SWT 13
P Darstellung eines Graphen AWT, Swing, JavaFX & SWT 2
G keine darstellung in JTable AWT, Swing, JavaFX & SWT 2
A JLabel: Unterschiede zw. JRE 1.3 und 1.5 in der Darstellung AWT, Swing, JavaFX & SWT 3
B Komische Darstellung unter Windows 2000 AWT, Swing, JavaFX & SWT 2
Z Seltsame Darstellung verschachtelter GridBagLayouts AWT, Swing, JavaFX & SWT 2
M SWT Darstellung Linux / Win verschieden? AWT, Swing, JavaFX & SWT 4
P Fehlerhafte Darstellung bei JLabel.setText AWT, Swing, JavaFX & SWT 2
C Timer, Darstellung einer Uhr AWT, Swing, JavaFX & SWT 4
D Wie Darstellung / Layout als Liste AWT, Swing, JavaFX & SWT 2
T darstellung eines polynom 5.grades AWT, Swing, JavaFX & SWT 2
S JTable + Sortieren => Problem bei Darstellung AWT, Swing, JavaFX & SWT 13
U JSlider - Probleme bei der Darstellung AWT, Swing, JavaFX & SWT 3
V jTalbe: Probs bei Icon Darstellung AWT, Swing, JavaFX & SWT 4
Z Empfehlung für solche Darstellung! AWT, Swing, JavaFX & SWT 4
F Darstellung von Tastaturkürzel in JMenuItem AWT, Swing, JavaFX & SWT 13
R Mehrzeilige Darstellung von Spalten in SWING-Tabellen AWT, Swing, JavaFX & SWT 5
M Problem mit JTree-Darstellung AWT, Swing, JavaFX & SWT 5
T Problem mit Darstellung AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben