Swing "Vier Gewinnt"-Oberfläche

Private Void

Aktives Mitglied
Hallo!

Ich bin gerade dabei, das Spiel "Vier Gewinnt" zu programmieren und habe mit der Oberfläche angefangen.
Dazu hab ich jetzt folgende Frage: Gibt es eine Möglichkeit, dass die Einzelfelder aneinander "haften" bleiben (nicht voneinander getrennt/entfernt werden), wenn man im Quellcode oder zur Laufzeit mit der Maus die Größe des Fensters ändert?

Hier mal das, was ich bisher auf die Reihe bekommen habe:

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Hauptfenster extends JFrame{
	
	private JPanel contentPane = (JPanel) getContentPane();
	
	public Hauptfenster() {
		contentPane.setLayout(new BorderLayout());
		
		contentPane.add(new Spielfeld(), BorderLayout.CENTER);
	}
	
	public static void main(String[] args) {
		Hauptfenster frame=new Hauptfenster();
		frame.setSize(new Dimension(800, 600));
		frame.setTitle("Vier Gewinnt");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
(Ich habe im Hauptfenster das BorderLayout genommen, um später noch ein paar Anzeigen um das Spielfeld herum einzufügen)

Java:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JPanel;

public class Spielfeld extends JPanel{
	
	private Feld[][] felder=new Feld[7][6];
	private GridBagLayout gbl=new GridBagLayout();
	private GridBagConstraints gbc = new GridBagConstraints();
	
	public Spielfeld(){
		setLayout(gbl);

		gbc.weightx = 1;
		gbc.weighty = 1;
		gbc.fill = GridBagConstraints.BOTH;
		
		for (int i = 0; i < 7; i++) {
			for (int j = 0; j < 6; j++) {
				felder[i][j]=new Feld();
				
				gbc.gridx=i;
				gbc.gridy=j;
				gbl.setConstraints(felder[i][j], gbc);
				add(felder[i][j], gbc);
			}
		}
	}
}

Java:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;

public class Feld extends JComponent{
	
	private Rectangle2D.Float rechteck = new Rectangle2D.Float(0,0,60,60);
	private Ellipse2D.Float kreis = new Ellipse2D.Float(5,5,50,50);

	public void paint (Graphics g){
		Graphics2D g2 = (Graphics2D) g;
		g2.setStroke(new BasicStroke(1));
		g2.setPaint(Color.BLUE);
		g2.fill(rechteck);
		g2.draw(rechteck);
		g2.setPaint(Color.WHITE);
		g2.fill(kreis);
		g2.draw(kreis);
	}
}
 

Marco13

Top Contributor
Vielleicht reicht es schon, statt des GridBagLayouts ein GridLayout(7,6) zu verwenden?

BTW: paintComponent überschreiben, nicht paint
Java:
public void paintComponent(Graphics g){
    super.paintComponent(g);
    ... Rest wie vorher...
}
 

Marco13

Top Contributor
Ach so äh ja... vielleicht meinst du den Punkt, dass das, was da reingemalt wird, immer gleich groß ist...

Code:
public void paintComponent(Graphics g){
    super.paintComponent(g);
    Rectangle2D.Float rechteck = new Rectangle2D.Float(0,0,getWidth(),getHeight());
    Ellipse2D.Float kreis = new Ellipse2D.Float(5,5,getWidth()-5, getHeight()-5);
    ... Rest wie vorher ... ;-)
}

!?
 

Private Void

Aktives Mitglied
In meinem ursprünglichen Gedankengang wären die Felder und damit das Spielfeld immer gleich groß geblieben.
Aber dass die Felder enstsprechend der Ausdehnungen des JFrames einfach mitwachsen bzw. -schrumpfen, ist ja noch viel besser, als ich mir das ursprünglich vorgestellt hab :D !!

Abgesehen davon hätte ich spontan und auf die Schnelle auch gar nicht gewusst, wie ich das hätte anstellen sollen, dass die Größe der Felder automatisch an die veränderte Größe des Frames angepasst wird.

Hab recht vielen Dank :toll:!!
 

Marco13

Top Contributor
Ahhhsoo... ja, dass nicht-mitwachsen wäre gegangen, indem man das Spielfeld nochmal in ein eigenes Panel gelegt hätte, grob sowas wie
Code:
JPanel spielfeld = new Spielfeld();
spielfeld.setPreferredSize(new Dimension(300,300)); // Feste größe
JPanel hilfsPanel = new JPanel(new FlowLayout());
hilfsPanel.add(spielfeld);
contentPane.add(hilfsPanel, BorderLayout.CENTER);
aber das ist so ja nicht mehr nötig.

EDIT: Oder ein anderer LayoutManager für's ContentPane, oder oder oder ... da gäb's viele Möglichkeiten
 

Private Void

Aktives Mitglied
öhhmm ... :eek:

Jetzt, wo ich das hier sehe:

Code:
JPanel spielfeld = new Spielfeld();
spielfeld.setPreferredSize(new Dimension(300,300)); // Feste größe
JPanel hilfsPanel = new JPanel(new FlowLayout());
hilfsPanel.add(spielfeld);
contentPane.add(hilfsPanel, BorderLayout.CENTER);

... frag ich mich ehrlich gesagt schon ein bisschen, wieso ich da nicht selbst drauf gekommen bin ???:L . Ich hab die ganze Zeit gedacht, ich müsste am GridBagLayout irgendwas drehen können.

Aber andererseits kann ich ja im Grunde jetzt froh über meinen kleinen "Aussetzer" sein, denn dadurch bin ich ja jetzt auf eine viel bessere Idee aufmerksam gemacht worden.
:lol:
 

Marco13

Top Contributor
Bei dem dynamischen Mitwachsten tritt aber das "Problem" auf, dass die Felder verzerrt werden können (also die Felder nicht mehr immer quadratisch sind). Deswegen könnte man das Mitwachsen noch mit dem anderen Ansatz (mit dem Hilfspanel) kombineren, aber dem Hilfspanel ein AspectLayout geben: Dann ist es immer so groß wie möglich unter gleichzeitiger Einhaltung eines bestimmten Seitenverhältnisses - bei dir wäre das Verhältnis bei 6x7 Feldern z.B. 6.0f/7.0f.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Konstruktor für "Vier Gewinnt" AWT, Swing, JavaFX & SWT 10
L Swing Vier Gewinnt Problem AWT, Swing, JavaFX & SWT 2
A Vier gewinnt: GUI aktualisiert sich nicht AWT, Swing, JavaFX & SWT 12
F Eingabe in JPasswordField auf vier Zeichen beschränken AWT, Swing, JavaFX & SWT 3
M 4-Gewinnt mit Buttons AWT, Swing, JavaFX & SWT 1
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
P Zeichnen von Ovalen in Swing (4 Gewinnt) AWT, Swing, JavaFX & SWT 3
F 4-Gewinnt als Applet AWT, Swing, JavaFX & SWT 24
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
S Swing Oberfläche rekusiv updaten mit updateUi() AWT, Swing, JavaFX & SWT 10
M LookAndFeel Oberfläche wie Eclipse/Business Objects oder Solvatio AWT, Swing, JavaFX & SWT 2
K Initialisierung von Oberfläche Richtig? AWT, Swing, JavaFX & SWT 5
T Java Swing Oberfläche aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
K Eclipse-Java Export/Import mit Oberfläche AWT, Swing, JavaFX & SWT 2
D Swing JComponent zeichnen ohne sie zur Oberfläche hinzuzufügen AWT, Swing, JavaFX & SWT 2
J prinzipielles verständnis für Oberfläche/Code-trennung AWT, Swing, JavaFX & SWT 5
T wieso leere Oberfläche? AWT, Swing, JavaFX & SWT 5
S Flickr Bilder in Gui Oberfläche AWT, Swing, JavaFX & SWT 21
cedi Swing Problem mit Grafischer Oberfläche AWT, Swing, JavaFX & SWT 8
E Swing Grafische Oberfläche zur Ordnerauswahl AWT, Swing, JavaFX & SWT 6
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
B Wegfindung - Oberfläche AWT, Swing, JavaFX & SWT 3
P Erste Versuche einer Grafischen Oberfläche AWT, Swing, JavaFX & SWT 8
S AWT Oberfläche integriert sich nicht in GTK-Theme AWT, Swing, JavaFX & SWT 5
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
D Mehrere Biler auf einer Oberfläche AWT, Swing, JavaFX & SWT 6
G Swing skalierbare Oberfläche AWT, Swing, JavaFX & SWT 2
W Oberfläche wird nicht koreckt gezeichnet AWT, Swing, JavaFX & SWT 5
Jenny87 AWT Tic Tac Toe oberfläche AWT, Swing, JavaFX & SWT 20
dl85hej meine erste Oberfläche AWT, Swing, JavaFX & SWT 3
multiholle Oberfläche MP3-Player AWT, Swing, JavaFX & SWT 2
A Oberfläche wir mit html-Frames aufbauen AWT, Swing, JavaFX & SWT 11
C Swing-Oberfläche wird auf einiges PCs nicht korrekt dargeste AWT, Swing, JavaFX & SWT 19
H JAVA Fenster Oberfläche AWT, Swing, JavaFX & SWT 3
L wie kann ich diese Oberfläche bauen ohne das gestreckt wird? AWT, Swing, JavaFX & SWT 18
S In JavaSwing Mailversand mit Oberfläche AWT, Swing, JavaFX & SWT 2
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
M Aus Swing Oberfläche Bild erzeugen AWT, Swing, JavaFX & SWT 39
F Zugriff auf Oberfläche bzw Trennung GUI / Logik AWT, Swing, JavaFX & SWT 3
T Problem mit Oberfläche und Thread AWT, Swing, JavaFX & SWT 10
G Ansprechende Java Oberfläche entwickeln AWT, Swing, JavaFX & SWT 10
B Probleme mit Öffnen einer GUI Oberfläche AWT, Swing, JavaFX & SWT 2
I Swing-Oberfläche wird nicht korrekt gezeichnet AWT, Swing, JavaFX & SWT 6
G Oberfläche löschen und neue erstellen AWT, Swing, JavaFX & SWT 4
R RAD Oberfläche für Eclipse gesucht AWT, Swing, JavaFX & SWT 4
G Tooltips auf grafischer Oberfläche AWT, Swing, JavaFX & SWT 2
A Background Image auf SWT Oberfläche legen AWT, Swing, JavaFX & SWT 3
J Anordung der Objekte in der Oberfläche? AWT, Swing, JavaFX & SWT 3
B Oberfläche mit SWT AWT, Swing, JavaFX & SWT 5
S Berechtigungssystem für Swing-Oberfläche AWT, Swing, JavaFX & SWT 2
M Grafische Objekte beliebig auf einer Oberfläche verschieben AWT, Swing, JavaFX & SWT 3
T Eigene grafische Oberfläche AWT, Swing, JavaFX & SWT 7
G JTree in Oberfläche Integrieren?? AWT, Swing, JavaFX & SWT 6
D Trennung von Programm und Oberfläche AWT, Swing, JavaFX & SWT 3
M Java Oberfläche per Drag&Drop -- Wie bei Visual Basic ! AWT, Swing, JavaFX & SWT 5
F Oberfläche wird nicht gestartet! AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben