Kompliziertere Swing Gui

P

peemo

Gast
Hi!

Ich sitze gerade vor einem Problem und ich bin mir nicht sicher wie ich es realisieren soll, deshalb hoffe ich ein paar Anregungen bzw Tips zu bekommen, wie man das ganze sinnvoll und stilistisch gut lösen kann.
Wir machen in der Uni zz ein Softwareentwicklungsprojekt bei dem wir ein Netzwerkfähiges Reversi Spiel implementieren sollen.
Momentan sieht das Ding so aus: (Bitte beachten, hintergrund, die Pfeile, etc ist alles noch nicht schön, da wird sich jemand um bessere Imgs kümmern, mir gehts momentan nur um den GUI Aufbau.)

bildschirmfoto20121220u.png


Das Spielfeld ist ein Custom Jpanel, ich mal da die Quadrate rein und mit drawImage die Steine. Wenn ich den Frame aufziehe, werden auch spielfeld und Steine entsprechend vergrößert/-kleinert.
(Ich find die Funktionalität ganz schön, aber eigentlich auch unnötig. Den Frame zu Sperren würde Vielleicht manches erleichtern)
Das Gewurschtel unten ist ebenfalls ein custom Jpanel. Es soll anzeigen, wie viele Steine jeder gerade hat(die 2) und wer am Zug ist(roter Pfeil deutet auf Stein).
Ich weiss nicht wie ich das vernünftig hinbekommen soll. Momentan liegen da 6 leere Jlabel als Platzhalter rum, die Zahlen sind ebenfalls ein Jlabel. Die Bilder kommen mit drawImage.
Das Problem ist, wenn ich das Fenster in der größe veränder bleiben die Bilder wo sie sind und die Jlabels verschieben sich alle ganz merkwürdig.
Ich hab iwie das gefühl dass eine Kombi aus Label und drawImage kein guter Stil ist.
Es sollte auch noch ein ResetButton und ein ShowHintsButton eingebaut werden.

Welche Elemente würdet ihr wie andordnen? Welchen Layoutmanager? Meint ihr der Rest is ok?
Ich würd mich sehr über alles Ideen freuen.
Vielen Dank schonmal
Peter
 

peemo_royal

Mitglied
Hi.
Ist die Frage zu bescheuert oder schlecht gestellt? Wenn ihr wollt präzisier ich auch noch;)
Ich hab das ganze auf jeden Fall jetzt geändert und zeichne die untere leiste komplett. Es kommt mir nur so vor als wär das ganze nicht wirklich richtig. Ich muss unten mindestens noch ein Jlabel haben , damit die Leiste eine gewisse Größe hat und ausserdem kann ich nichts so anordnen wie ich will.
Hilft da vielleicht nur das GridBagLayout weiter?
Grüße Peter
 

eRaaaa

Top Contributor
Du könntest vlt nochmal genauer beschreibne wie das untere JPanel nun genau aufgebaut ist, welchen Layoutmanager verwendest du denn da?
Spontan (bezogen auf deine Erklärung und Frage) könnte man anstelle dass du mit drawImage selbst zeichnest, den Pfeil und Stein unten z.B. als JButton nutzen. Dem JButton dann einfach mit setIcon /setRollOverIcon, setBorder, setOpaque, setContentAreaFilled und setBackground das Icon verpassen, dann sieht man eig. gar nicht mehr, dass das ein JButton ist, die Anordnung der Komponente im Layoutmanager lässt sch aber unter Umständen besser handeln, wenn nicht sogar genauso wie die Labels...
 

peemo_royal

Mitglied
vermutlich liegt da der hund begraben… ich benutz ein GridLayout. Aber irgendwie auch wieder nicht^^
hier mal der code. es funktioniert momentan ja, aber ich bin hoch unzufrieden weil es mega unflexibel ist und es fühlt sich einfach nicht gut an.
Java:
package reversi;

import java.awt.*;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.*;

import java.io.*;
import java.net.URL;

public class TurnPanel extends JPanel {

    private IReversiView view;
    private Image img, blackStone, whiteStone, blueStone, brownStone, greenStone, orangeStone, purlpleStone, redStone, yellowStone;
    private int imageWidth, imageHeight;
    private Image greenArrowRight;
    private Image greenArrowLeft;
    private Image blackArrowRight;
    private Image blackArrowLeft;
    private JLabel countP1;
    private JLabel countP2;
    private JLabel player1;
    private ImageIcon player1Icon, player2Icon;
    private JLabel player2;
    private Object player1Image;
    private Image resizedBlackStone;
    private JLabel freeSpace;
    private JLabel freeSpace1;
    private JLabel freeSpace2;
    private JLabel freeSpace3;
    private JLabel freeSpace4;
    private JLabel freeSpace5;
    private JLabel freeSpace6;
    private JLabel freeSpace7;
    private JRadioButton showPossibleButton;

    public TurnPanel(IReversiView view) {
	super();
	this.view = view;
	this.img = new ImageIcon(this.getClass().getClassLoader().getResource("main.jpg")).getImage();
	this.blackStone = new ImageIcon(this.getClass().getClassLoader().getResource("blackStone.png")).getImage();
	this.whiteStone = new ImageIcon(this.getClass().getClassLoader().getResource("whiteStone.png")).getImage();
	this.blueStone = new ImageIcon(this.getClass().getClassLoader().getResource("blueStone.png")).getImage();
	this.brownStone = new ImageIcon(this.getClass().getClassLoader().getResource("brownStone.png")).getImage();
	this.greenStone = new ImageIcon(this.getClass().getClassLoader().getResource("greenStone.png")).getImage();
	this.orangeStone = new ImageIcon(this.getClass().getClassLoader().getResource("orangeStone.png")).getImage();
	this.purlpleStone = new ImageIcon(this.getClass().getClassLoader().getResource("purpleStone.png")).getImage();
	this.redStone = new ImageIcon(this.getClass().getClassLoader().getResource("redStone.png")).getImage();
	this.yellowStone = new ImageIcon(this.getClass().getClassLoader().getResource("yellowStone.png")).getImage();

	this.player1Icon = new ImageIcon(this.getClass().getClassLoader().getResource("blackStone.png"));
	this.player2Icon = new ImageIcon(this.getClass().getClassLoader().getResource("whiteStone.png"));

	this.greenArrowRight = new ImageIcon(this.getClass().getClassLoader().getResource("greenArrowRight.png")).getImage();
	this.greenArrowLeft = new ImageIcon(this.getClass().getClassLoader().getResource("greenArrowLeft.png")).getImage();
	this.blackArrowRight = new ImageIcon(this.getClass().getClassLoader().getResource("blackArrowRight.png")).getImage();
	this.blackArrowLeft = new ImageIcon(this.getClass().getClassLoader().getResource("blackArrowLeft.png")).getImage();

	createContent();
    }

    private void createContent() {
	this.setLayout(new GridLayout(1, 6));
	this.setSize(new Dimension(view.getGamePanelWidth(), view.getCellSize()));

	freeSpace = new JLabel(".");
	showPossibleButton = new JRadioButton("Show possible moves");
	freeSpace.setBorder(null);
	freeSpace.setOpaque(false);
	freeSpace.setBackground(new Color(0, 0, 0, 0));
	this.add(freeSpace);

    }

    protected void paintComponent(Graphics g) {
	Graphics2D g2d = (Graphics2D) g;
	super.paintComponents(g2d);
	this.setSize(new Dimension(view.getGamePanelWidth(), view.getCellSize()));
// g2d.drawImage(img, 0, 0, view.getGamePanelWidth(), view.getCellSize(), null);
	freeSpace.setPreferredSize(new Dimension(view.getCellSize(), view.getCellSize()));
	Font f = new Font("SansSerif", Font.BOLD, 20);
	g2d.setFont(f);

	g2d.drawImage(blackStone, view.getCellSize() * 2, 0, view.getCellSize(), view.getCellSize(), null);
	g2d.drawImage(whiteStone, view.getCellSize() * 5, 0, view.getCellSize(), view.getCellSize(), null);

	if (view.getCurrPlayer() == Cell.BLACK) {
	    g2d.drawImage(greenArrowLeft, view.getCellSize() * 3, 0, view.getCellSize(), view.getCellSize(), null);
// g2d.drawImage(blackArrowRight, view.getCellSize() * 4, 0, view.getCellSize(), view.getCellSize(),
// null);
	}
	if (view.getCurrPlayer() == Cell.WHITE) {
// g2d.drawImage(blackArrowLeft, view.getCellSize() * 3, 0, view.getCellSize(), view.getCellSize(),
// null);
	    g2d.drawImage(greenArrowRight, view.getCellSize() * 4, 0, view.getCellSize(), view.getCellSize(), null);
	}

	g2d.setColor(Color.WHITE);
	g2d.drawString(String.valueOf(view.getCountBlack()), (int) (view.getCellSize() * 2.4), (int) (view.getCellSize() / 1.7));
	g2d.setColor(Color.BLACK);
	g2d.drawString(String.valueOf(view.getCountWhite()), (int) (view.getCellSize() * 5.4), (int) (view.getCellSize() / 1.7));

    }
}
Dieses Panel ist in meinem Main Frame mit BorderLayout.SOUTH


Ich würde einfach gerne lernen vernünftig und sauber GUI mit SWT zu programmieren. Macht da vielleicht ein WYSIWYG Editor Sinn um ein wenig dahinter zu steigen? Oder gibt es Tutorials dazu? Natürlich kann man nachlesen was man alles für elemente einbauen kann. Aber ich bin mir halt nie sicher wann ich was und wo am besten benutzen kann.

Vielen Dank schonmal und Grüße
Peter
 

peemo_royal

Mitglied
Und du glaubst, dass sich mit SWT unflexibel programmierter Code besser "anfühlt"? :bahnhof:

Hä? Wie kommst du zu der Annahme? Ist auf jeden Fall nicht sonderlich hilfreich. Vermutlich versteh ich einfach nicht was du mir damit sagen willst. Ich mein ich Frag hier nach Hilfe, wie man vernünftig GUI produziert weil ich mich offensichtlich damit nicht auskenn und eben lernen will wie man das ganze schön und flexibel gestaltet.


€: Ich meinte SWING und nicht SWT!! Es geht mir einfach darum dass ich mit Java ne gute GUI hinbekomm ;)
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
peemo_royal hat gesagt.:
Ich meinte SWING und nicht SWT!!
peemo_royal hat gesagt.:
Ich würde einfach gerne lernen vernünftig und sauber GUI mit SWT zu programmieren.

Du hast deine GUI bisher mit Swing geschrieben. Was lässt dich davon ausgehen, dass die GUI mit SWT besser laufen wird?
Es klingt für mich danach, als ob du den Schuldigen im Swing suchst.
Und genau das ist es, was mich irritiert.
 

peemo_royal

Mitglied
Du hast deine GUI bisher mit Swing geschrieben. Was lässt dich davon ausgehen, dass die GUI mit SWT besser laufen wird?
Es klingt für mich danach, als ob du den Schuldigen im Swing suchst.
Und genau das ist es, was mich irritiert.

Nein. Ich hab da bisschen was verwechselt ;)
Also ob SWING SWT oder AWT is mir vollkommen wumpe.
Ich hab nur das Gefühl dass, so wie ichs im moment mach (Images drawen) es nicht die beste Lösung ist.
Ich such nirgendwo einen schuldigen, sondern ich such Hilfestellung dazu, wie ich eben eine flexible und vernünftige GUI hinbekomm. Es braucht mir auch keiner den Code dazu schreiben, es geht nur um Lösungsansätze. Ich hab zb GridBagLayout und Label probiert. Aber iwie ist das auch nicht so pralle.
Weisst du jetzt worauf ich hinauswill?
Sorry für die Komplikationen, bin wie du siehst ein wenig verwirrt :)
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer

peemo_royal

Mitglied
Ok. Und meinst du es ist schlau, die Imgs per drawImage reinzuladen? Ich würde gern links und rechst von den Spielsteinen noch jeweil einen Button einfügen. Das geht aber momentan so wie es ist nicht wirklich, da die Buttons ja keine absolute Position haben und die Imgs schon...
 

L-ectron-X

Gesperrter Benutzer
Nun ja. Da dein Code für mich nicht kompilierbar ist, wäre es gut, wenn du ein Problem-Bild von deiner GUI postest, damit man mal sehen kann, wie das Problem aussieht. Gut wäre dann noch eine Skizze, wie es aussehen soll. Dann kann man dir gezielt Code schreiben.

Zum Bilder Laden, solltest du dir den Link ansehen, den ich oben gepostet habe.
 

peemo_royal

Mitglied
so, hab mal die gui angehängt… Eigentlich bin ich ja relativ zufrieden so wies jetzt aussieht. Ich brauch jetzt noch links bzw rechts der beiden Steine unten jeweils einen Button. Und die Zahlen die auf die Steine draufgemalt werden sind halt auch nicht ganz perfekt.
Das Problem ist, dass man so wies ist, nicht einfach schnell mal was ändern kann weil man dann wieder ewig rumrechnen muss wie man die Steine verhältnismässig zum Rest Positioniert. Ich fänds gut wenn man das ein wenig dynamischer gestalten könnte… Auch wenn man später mal neue Sachen hinzufügen möchte etc.
 

Anhänge

  • Bildschirmfoto 2012-12-23 um 12.37.18.jpg
    Bildschirmfoto 2012-12-23 um 12.37.18.jpg
    92,6 KB · Aufrufe: 31
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Swing Swing - Eigene Komponenten erstellen AWT, Swing, JavaFX & SWT 17
W Swing GUI - Komponenten platzieren AWT, Swing, JavaFX & SWT 14
XWing Jave swing overly benutzten. AWT, Swing, JavaFX & SWT 3
J Anzeige ID und Markierung für Knoten in Eclipse & Swing AWT, Swing, JavaFX & SWT 4
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben