Minesweeper: 2D Feld von JButtons anlegen

Status
Nicht offen für weitere Antworten.

Nikolas

Aktives Mitglied
Hallo

Ich bin letztens von Windows auf Mac umgestiegen und habe deswegen von Pascal zu Java wechseln müssen.
Um jetzt etwas in das GUI Programmieren reinzukommen, wollte ich mir ein kleines MineSweeper bauen.

Code:
import javax.swing.*; 
import java.util.Random; 
import java.awt.event.*; 
 

public class MineSweeper {


	public static void main( String[] args ) 
	  { 
		
		int x=5; // Anzahl Kästchen
		int y=3;
		int mineCount = 50; // Bomben im Feld
		double mineProb = x*y / mineCount; // zu Testen
		
		boolean[][] Bomb = new boolean[ x ][ y ];
		int[][] Zahlen = new int[ x ][ y ];
		

	    JFrame f = new JFrame( "MineSweeper"); 
	    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
	    int frameWidth = 500;
	    int frameHeight = 500;
		int xOffset = 15;
		int yOffset = 15;
		
	    f.setSize(frameWidth , frameHeight ); 
	    
	    f.setVisible( true ); 
	    
	    // Die MinenButtons
		JButton[][] Buttons = new JButton[x][y];
		
	
		int bWidth = (frameWidth - 2*xOffset) / x;
		int bHeight = (frameHeight - 2*yOffset) / y; 
	    
		// Setzen der Buttons:
		for (int i=0; i<x; i++) {
			for (int j=0;j<y; j++) {
				Buttons[i][j] = new JButton();
				f.add(Buttons[i][j]);
				
				Buttons[i][j].setSize(bWidth,bHeight);

				Buttons[i][j].setLocation(xOffset + i*bWidth,yOffset + j* bHeight);
			
				Buttons[i][j].setText("x="+i+"y="+j);
				
				}
		}
		
	  } 
 
}

Also eigentlich nichts spektakuläres. (Die Größen sind noch nicht perfekt, aber egal). Wenn ich das jetzt laufen lasse, bauen sich fast alle Buttons passend auf. Nur der letzte Button hat die Größe des Frames und überdeckt die anderen, sobald ich auf ihn klicke.
Kann mir da jemand weiterhelfen?

Nikolas
 

Nikolas

Aktives Mitglied
Davon habe ich bis gerade eben noch nie etwas gehört. Und da ich auf dieses Problem gestoßen bin, würde ich es gerne lösen. Mir gehts nicht so sehr darum, ein Minesweeper zu haben, als die auftretenden Probleme zu lösen.
 
S

SlaterB

Gast
nun, das Standard-Layout des ContentPanes, BorderLayout,
interessiert sich für setLocation und ähnliches nicht die Bohne,

setLocation ist sowieso eine fragwürdige Taktik
und zudem ist Layout in Swing allgemein eine sehr komische Sache,

versuche da gerade anfangs nichts von alleine, sondern orientiere dich an funktionierenden Vorgaben,
siehe auch
http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html
 

Nikolas

Aktives Mitglied
Warum ist SetLocation eine fragwürdige Taktik? Bei fast allen Buttons wird genau das gemacht was ich will. Und was soll man machen, wenn man die Buttons in einen Kreis anordnen will, oder sonstwie?
 
S

SlaterB

Gast
> Bei fast allen Buttons wird genau das gemacht

was sind denn 'fast alle Buttons'?
meinst du fast alle Beispiele? also ich kann mich spontan an keins erinnern,

ich lese z.B. oft die oben angegeben Sun-Doku, da wird das wohl auch nicht benutzt,

Buttons in einem Kreis habe ich auch noch nie angeordnet,
dafür wäre das vielleicht passend, das mag gerne sein, ein Spezialfall,

aber gerade bei so ordentlichen Tabellenstrukturen ist das der falsche Ansatz,
ein simples new GridLayout(5, 3); erspart 15 Koordinaten-Berechnungen + Co.

es hindert dich natürlich niemand, das dennoch zu tun,
interessant dann:
es gibt noch setLayout(null) + setBounds(x,y,width,height)
 

Nikolas

Aktives Mitglied
>was sind denn 'fast alle Buttons'?

fast alle Buttons heisst, alle bis auf endlich viele Ausnahmen. Wenn ich 3*5 Buttons habe, ist der Button an Koordinate 3,5 so groß wie das ganze Frame. Das CodeStück oben ist kompilierbar, da kannst du es am Besten sehen.

Danke für deine Hilfe :)

// Ich habe jetzt noch das Layout auf Null gesetzt und jetzt sieht es genau so aus, wie ich es haben wollte :toll:
 

Wildcard

Top Contributor
null-'Layout' ist für alles ausser einer freien Zeichenfläche falsch bis bestenfalls fragwürdig.
Gewöhn dir LayoutManager an.
 

Wildcard

Top Contributor
1. Mehr Arbeit
2. Unflexibel
3. Das Layout kann sich nicht anpassen wenn sich die Fenstergröße ändert
4. ScrollPanes funktionieren nicht richtig
5. Ändert sich das Look and Feel (oder auch nur die Schriftart oder Größe) zerbröselt dein mühsam erstelltes Layout.
 

Kaladial

Bekanntes Mitglied
also eigentlich geb ich wildcard recht...
finde null an und für sich nicht so toll ...

wenn ich mir dann aber meine programme anguck ... 90 % meine layouts sind trotzdem xyLayouts (oder jetzt halt null-Layouts) ich bekomm jedesmal aufs neue ne kriese mit den Layout-Managern... nie machen sie das was sie sollen... is echt zum haare raufen...
 

Nikolas

Aktives Mitglied
Die Punkte von Wildcard finde ich etwas komisch.
Mehr Arbeit: kann sein, dafür sieht es aber so aus, wie ich es will, und nicht wie Java will, und genau das will ich als Programmierer doch erreichen.

Unflexibel, kann sich nicht einer neuen Fenstergröße anpassen: Sobald man sauber programmiert, ist das wohl wirklich kein Problem. Wenn man also nicht stupide einen Button auf die Größe 10,10 setzt, sondern eher auf 10Prozent der Breite des Containers, kann man da wunderbar das Formular durch die Gegend ziehen.

zu 4 und 5 kann ich mangels Erfahrung mit Java noch nichts sagen.

Von da her finde ich es etwas komisch, ein legitimes Vorgehen, dass sauber angewand sehr gut funktionieren kann als falsch abzutun, nur weil man selbst etwas anders macht. Vielleicht werde ich später auch auf den Layout Manager benutzen, aber nicht wegen der Argumente von Wildcard.
 
S

SlaterB

Gast
> Wenn man also nicht stupide einen Button auf die Größe 10,10 setzt, sondern eher auf 10Prozent der Breite des Containers, kann man da wunderbar das Formular durch die Gegend ziehen.

wie willst du denn das machen? zum Programmstart, klar,
aber dann bei jeder Größenänderung neuberechnen, neu anordnen?

gratuliere, ein Schritt weiter auf dem Weg, die Standardlayouts Punkt für Punkt nachzubauen,
aber wieso nicht gleich die fertigen Endprodukte verwenden?

> ein legitimes Vorgehen, dass sauber angewand sehr gut funktionieren kann als falsch abzutun

das Abtun bezieht sich nur auf die 5 Zeilen Code setLayout(null) + setBounds/ setLocation,
wie es der Erfahrung nach in 99% aller Fälle für immer bleiben wird (oder man zu einem Java-Layout wechselt)

wenn du natürlich ein riesiges Framework baust, dann kann man das nicht mehr als 'unflexibel' abtun, richtig,
sondern höchstens noch als 'nachbauen' abtun ;)

für Speziallayouts wie Buttons im Kreis mag das natürlich unausweichlich sein, keine Frage
 

Nikolas

Aktives Mitglied
>aber wieso nicht gleich die fertigen Endprodukte verwenden?

Damit ich beim nachbauen noch etwas mehr über die Komponenten lernen kann. Ausserdem will ich schon wissen, wie das ganze intern funktioniert. Irgendwann werde ich sicher mal ein eigenes Layout anwenden wollen und dann bringt es mir wenig, wenn ich nur den Layout Manager bedienen wollen.
 
S

SlaterB

Gast
na das ist natürlich immer ein Sonderargument,
von dem Standpunkt aus darfst du niemanden etwas vorwerfen, das kann man nicht per Default berücksichtigen

sonst könnte man ja nicht mal mehr meckern, wenn jemand mit einer leeren Zeichfläche anfängt und da alle Komponenten per Hand malt,
statt die vergleichsweise hochwertigen JPanels, JButtons & Co. zu verwenden, mit vergleichesweise komfortablen simplen setLocation()
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zeppi Swing Minesweeper Rekursiv AWT, Swing, JavaFX & SWT 12
ZH1896ZH MineSweeper Projekt: Testen nicht möglich AWT, Swing, JavaFX & SWT 6
T Minesweeper Interaktivität AWT, Swing, JavaFX & SWT 2
Z Minesweeper clon kritik? AWT, Swing, JavaFX & SWT 3
Jose05 einfache GUI mit schwarzem Feld AWT, Swing, JavaFX & SWT 12
J vom Dialogfenster ein Feld des Hauptfenster einlesen AWT, Swing, JavaFX & SWT 2
D JavaFX Leuchtendes großes Feld? AWT, Swing, JavaFX & SWT 2
KilledByCheese 2D-Grafik Feld automatisch bewegen, in zeitabständen AWT, Swing, JavaFX & SWT 7
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
N Custom JButton Feld aus Parent lesen lassen AWT, Swing, JavaFX & SWT 11
R Swing JComboBox - Null-Feld AWT, Swing, JavaFX & SWT 7
D SWT StyledText-Feld Validieren??? AWT, Swing, JavaFX & SWT 3
B in jList feld aus einem objekt anzeigen AWT, Swing, JavaFX & SWT 2
E Feld aktualisieren AWT, Swing, JavaFX & SWT 8
M Feld breiter, als mit setColumns() angegeben AWT, Swing, JavaFX & SWT 3
B Graues Feld unter JComboBox AWT, Swing, JavaFX & SWT 2
N Feld wird nicht gezeichnet. Probleme mit Swing AWT, Swing, JavaFX & SWT 7
Paule Popup oder Dialog-Feld mit eigenem Inhalt AWT, Swing, JavaFX & SWT 9
M JTextField kontrollieren, sobald das Feld verlassen wird AWT, Swing, JavaFX & SWT 3
D Textumbruch in einem TextArea Feld AWT, Swing, JavaFX & SWT 5
J Einzelnes Feld in JTable färben AWT, Swing, JavaFX & SWT 2
R Name von Feld nicht ereichbar AWT, Swing, JavaFX & SWT 7
O JFileChooser - Zugriff auf Dateiname-Feld und Save-Button? AWT, Swing, JavaFX & SWT 6
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
H Auswahlmenü mit JButtons AWT, Swing, JavaFX & SWT 4
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
N "Automatisches" erstellen von jButtons AWT, Swing, JavaFX & SWT 1
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
S JButtons an Koordinaten setzen AWT, Swing, JavaFX & SWT 3
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
M Swing Selbstanordnende JButtons AWT, Swing, JavaFX & SWT 4
J EventHandler Bei JButtons AWT, Swing, JavaFX & SWT 2
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
F JButtons erstellen lassen mit unterschiedlichen Funktionen AWT, Swing, JavaFX & SWT 3
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
Kenan89 LayoutManager JPanel wächst beim adden neuer JButtons nicht mit AWT, Swing, JavaFX & SWT 4
A JButtons - es wird beim falschen Button die Hintergrundfarbe angepasst AWT, Swing, JavaFX & SWT 2
Z kleine JButtons und ihre Beschriftung AWT, Swing, JavaFX & SWT 5
K Swing Abgerundete JButtons AWT, Swing, JavaFX & SWT 8
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
J JButtons in aktivieren und deaktivieren AWT, Swing, JavaFX & SWT 3
T JButtons indexiert unter NetBeans anlegen AWT, Swing, JavaFX & SWT 7
H JButtons in JTable anzeigen AWT, Swing, JavaFX & SWT 5
T Maximale Länge eines JButtons AWT, Swing, JavaFX & SWT 5
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
R Swing Verschieben eines jButtons mittels MouseDragged AWT, Swing, JavaFX & SWT 4
K Runde JButtons ? AWT, Swing, JavaFX & SWT 7
B Swing JButtons in eine Arraylist<JButton> einfügen AWT, Swing, JavaFX & SWT 2
G Swing JButtons + ActionListener + final AWT, Swing, JavaFX & SWT 3
U Problem mit JButtons AWT, Swing, JavaFX & SWT 6
C Interface für JButtons,... AWT, Swing, JavaFX & SWT 7
J Swing JButtons und die ActionEvents AWT, Swing, JavaFX & SWT 2
P JButtons haben nicht immer lust zu erscheinen AWT, Swing, JavaFX & SWT 9
U Grafikkontext unter JButtons? AWT, Swing, JavaFX & SWT 5
Strahlungsleck Funktionalität von JButtons (Actionlistener etc.) AWT, Swing, JavaFX & SWT 17
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
F Sender für jButtons? AWT, Swing, JavaFX & SWT 2
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
J JButtons in Tabellenspalten anzeigen AWT, Swing, JavaFX & SWT 2
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
U Bilder, JLabels, JButtons voreinander AWT, Swing, JavaFX & SWT 7
D Darstellungsprobleme bei JButtons auf JInternalFrames AWT, Swing, JavaFX & SWT 4
A Hintergrundfrabe eines JButtons innerhalb eines JToolBar AWT, Swing, JavaFX & SWT 4
T Ausrichtung eines Jbuttons AWT, Swing, JavaFX & SWT 6
S JButtons Größe AWT, Swing, JavaFX & SWT 15
M JButtons immer gleiche Größe? AWT, Swing, JavaFX & SWT 8
H Unsichtbare JButtons? AWT, Swing, JavaFX & SWT 5
C JComboBox mit JButtons befüllen AWT, Swing, JavaFX & SWT 8
1 Warum sind JButtons viel breiter als der enthaltene Text ? AWT, Swing, JavaFX & SWT 4
S Text eines JButtons vertikal schreiben AWT, Swing, JavaFX & SWT 5
L-ectron-X Den Text eines JButtons unter das Icon setzen? AWT, Swing, JavaFX & SWT 2
M JButtons in JScrollPanel darstellen AWT, Swing, JavaFX & SWT 6
S JButtons in einem JPanel erscheinen nicht direkt AWT, Swing, JavaFX & SWT 7
G von JButtons erben, aber richtig! AWT, Swing, JavaFX & SWT 4
R JButtons werden nicht dargestellt AWT, Swing, JavaFX & SWT 7
G JButtons AWT, Swing, JavaFX & SWT 7
Z Problem mit Spielfläche aus JButtons AWT, Swing, JavaFX & SWT 2
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
G Icon eines JButtons ändern? AWT, Swing, JavaFX & SWT 7
M JButtons mit Linie verbinden AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben