Platz auf JButtons verändern

LukLuk

Aktives Mitglied
Heho Zusammen,
Ich wollte mal fragen ob es eine Möglichkeit gibt den "Platz" von dem Text auf den JButtons zu verändern. Denn Mein Problem ist das, dass der Text auf den Buttons in Punkte umgewandelt wird wenn er nur ein kleines Stück zu lang ist. Ich das Problem "gelöst" das ich einfach die Fenstergröße so groß gemacht hab das alles passt aber wenn ich das Programm auf einen kleineren Bildschirm ausführe kommt dann das Problem wieder.

Bitte um Hilfe.

Danke
 
Zuletzt bearbeitet:
Ich benutzte zur Zeit GridLayout und ich würde denn auch gerne weiterhin verwenden da das GridLayout die Anordnung aller JPanels macht.
 
Hm, ja. Da kann das passieren, weil sich das GridLayout immer an seinen Container anpasst.
Schiebst du ihn zusammen, verändern sich auch die eingebetteten Komponenten in ihrer Größe.
Probier mal FlowLayout. Kannst auch mehrere Panels mit passenden LayoutManagern verschachteln. Dann kommst du dahin, wo du hin willst. 😉
 
beim FlowLayout garnicht ... dort wird versucht so viel wie möglich immer weiter rechts von der vorherigen componente einzufügen ... erst wenn dies laut "prefferedSize()" nicht mehr passt wird die nächste angefangen
 
Meinst du mit "prefferedSize()" die Größe des Containers oder die des Fenster und noch eine andere Frage gibt es eine Möglichkeit den Inhalt eines Fenster immer der Größe des Fensters anzupassen?
 
Meinst du mit "prefferedSize()" die Größe des Containers
In dem Fall geht es um die Größe (bevorzugte Größe) der im Layout eingebauten Komponente(n).

noch eine andere Frage gibt es eine Möglichkeit den Inhalt eines Fenster immer der Größe des Fensters anzupassen?
Ja, den passenden LayoutManager. Welcher das ist, hängt davon ab, ws du ereichen möchtest. Pauschal kann man das hier jetzt also nicht sagen.
 
Ich hab jetzt mal das FlowLayout ausprobiert und mir ist aufgefallen das er JButtons bei denen setVisible false ist nicht anzeigt aber ich brauch die. Wie kann ich die auch noch anzeigen lassen,(also einfach ein leeres Feld)?
 
Du könnest den Button erst unsichtbar machen, wenn dein Fenster bereits sichtbar ist. Bin mir aber nicht sicher, ob das funktioniert. Käme auf einen Versuch an.
 
Hm hab das jetzt anders gemacht da deine Version nicht ging. Ich hab einfach setEnable auf false gestellt und dann setBorder(null).

So nun ist aber das Problem da das sich die Buttons bei vergrößern oder verkleiner des Fensters immer neu anordnen. Kann mann die irgendwie feststellen und einstellen das sich die mit dem Fenster vergrößern oder verkleinern?
 
Ginge mit GridBagLayout.
Du bekommst im Moment nur in Blaue geschossene Antworten auf deine Fragen, weil mir die Hintergründe nicht klar sind. Da kann es passieren, dass eine Antwort nicht brauchtbar ist... :bahnhof:
 
Hm ok dann erklär ich bischen was,
Ich möchte eine "Platzreservierung" programmieren. Jeder Einzelner Platz ist ein JButton. Es gibt 13 Reihen und pro Reihe sind zwischen 16 und 20 Plätze. Ganz rechts ist jeweils ein JButton der die Reihen Nummer angibt. Ganz Links sind bis auf drei Reihen ein JButton der nur als Platzhalter dient.
Auf jeden sichtbaren JButton ist eine PlatzNr geschrieben.

Wenn ich jetzt das Fenster verändere verschieben sich die Reichen und das sollte am besten verhindert werden.

Und nun der Code wenn wer ihn sehen möchte oder auch selber ausprobieren möchte.

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.Encoder;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.util.ArrayList;

public class Layout extends JFrame {
	private Container c;
	private JPanel panelNorth, panelSouth, panelWest, panelEast, panelCenter;
	private JButton reservieren, resRueck, speichern, laden, bSpeicherort;
	public JButton[] button;
	private JTextField eingabe;
	private JLabel namensausgabe;
	private String speicherort;
	public Platz[] platz;
	private int i, ir, is, butNumber, reihe;
	private boolean setR = false;
	private boolean setSpeicher = true;
	private boolean isCancel=true;
	private ArrayList<Platz> speicherListe;
	private Dimension screen,dButton;

	public Layout() {
		// --------------------Fenster erstellung---------------------------
		// ---------------------Grund-Layout--------------------------------
		c = new Container();
		screen=Toolkit.getDefaultToolkit().getScreenSize();
		
		setSize(screen);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
		setLocationRelativeTo(null);
		setTitle("Platzreservierung");
		Toolkit.getDefaultToolkit().setDynamicLayout(true);

		panelNorth = new JPanel();
		panelSouth = new JPanel();
		panelWest = new JPanel();
		panelEast = new JPanel();
		panelCenter = new JPanel();

		c = getContentPane();
		c.setLayout(new BorderLayout());
		

		panelCenter.setLayout(new FlowLayout());
		panelEast.setLayout(new GridLayout(14, 0));

		platz = new Platz[287];

		namensausgabe = new JLabel("Keine Angabe");
		panelNorth.add(namensausgabe);

		eingabe = new JTextField(20); // Textfeld wird erstellt und panelNorth
										// hinzugefügt
		panelNorth.add(eingabe);

		reservieren = new JButton("Reservieren"); // Reservierungs-Button wird
													// erstellt
		reservieren.setPreferredSize(new Dimension(140, 30));
		panelNorth.add(reservieren);

		resRueck = new JButton("Res. Löschen"); // Reservierung Löschen-Button
												// wird erstellt
		resRueck.setPreferredSize(new Dimension(140, 30));
		panelNorth.add(resRueck);

		speichern = new JButton("Speichern"); // Speichern-Button wird erstellt
		speichern.setPreferredSize(new Dimension(140, 30));
		panelNorth.add(speichern);

		laden = new JButton("Laden"); // Laden-Button wird erstellt
		laden.setPreferredSize(new Dimension(140, 30));
		panelNorth.add(laden);

		bSpeicherort = new JButton("Speichern unter..."); // Speichern Unter
															// Button wird
															// erstetllt
		bSpeicherort.setPreferredSize(new Dimension(140, 30));
		panelNorth.add(bSpeicherort);

		// ---------------------------------------------------------------

		button = new JButton[287]; // Buttonstellung
		dButton=new Dimension(55,55);
		for (i = 0; i < 286; i++) {
			button[i] = new JButton();
			button[i].setPreferredSize(dButton);
			platz[i] = new Platz();
			// button[i].setText(""+i);
			panelCenter.add(button[i]);

		}
		FileSystems.getDefault().getRootDirectories();

		reihe = 13; // Platzbelegung
		butNumber = 0;
		for (ir = 0; ir < 14; ir++) {
			switch (reihe) {
			case 13:
				if (reihe == 13) {
					for (is = 0; is < 18; is++) {
						button[is + 1].setText("" + (is + 1));
						platz[is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 12:
				if (reihe == 12) {
					butNumber = 23;
					for (is = 0; is < 19; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}

				}
				reihe--;
				break;
			case 11:
				if (reihe == 11) {
					butNumber = 45;
					for (is = 0; is < 19; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 10:
				if (reihe == 10) {
					butNumber = 67;
					for (is = 0; is < 20; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 9:
				if (reihe == 9) {
					butNumber = 89;
					for (is = 0; is < 20; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 8:
				if (reihe == 8) {
					butNumber = 111;
					for (is = 0; is < 20; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 7:
				if (reihe == 7) {
					butNumber = 133;
					for (is = 0; is < 20; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 6:
				if (reihe == 6) {
					butNumber = 155;
					for (is = 0; is < 19; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 5:
				if (reihe == 5) {
					butNumber = 177;
					for (is = 0; is < 18; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 4:
				if (reihe == 4) {
					butNumber = 198;
					for (is = 0; is < 16; is++) {
						if (is == 0) {
							button[butNumber].setText("RS");
							platz[butNumber].setSetRs(true);
							butNumber = 199;
						}
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 3:
				if (reihe == 3) {
					butNumber = 220;
					for (is = 0; is < 16; is++) {
						if (is == 0) {
							button[butNumber].setText("RS");
							platz[butNumber].setSetRs(true);
							butNumber = 221;
						}
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 2:
				if (reihe == 2) {
					butNumber = 242;
					for (is = 0; is < 16; is++) {
						if (is == 0) {
							button[butNumber].setText("RS");
							platz[butNumber].setSetRs(true);
							butNumber = 243;
						}
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			case 1:
				if (reihe == 1) {
					butNumber = 265;
					for (is = 0; is < 16; is++) {
						button[butNumber + is].setText("" + (is + 1));
						platz[butNumber + is].setPlatzNr(is + 1);
					}
				}
				reihe--;
				break;
			}

		}

		button[21].setText("13"); // Reihen-Nummer
		button[21].setEnabled(false);
		button[43].setText("12");
		button[43].setEnabled(false);
		button[65].setText("11");
		button[65].setEnabled(false);
		button[87].setText("10");
		button[87].setEnabled(false);
		button[109].setText("9");
		button[109].setEnabled(false);
		button[131].setText("8");
		button[131].setEnabled(false);
		button[153].setText("7");
		button[153].setEnabled(false);
		button[175].setText("6");
		button[175].setEnabled(false);
		button[197].setText("5");
		button[197].setEnabled(false);
		button[219].setText("4");
		button[219].setEnabled(false);
		button[241].setText("3");
		button[241].setEnabled(false);
		button[263].setText("2");
		button[263].setEnabled(false);
		button[285].setText("1");
		button[285].setEnabled(false);

		for (i = 0; i < 286; i++) { // Nicht genutzte Buttons entfernen
			if (button[i].getText() == "") {
				button[i].setEnabled(false);
				button[i].setBorder(null);
			}
			platz[i].setArrayNr(i); // Setzt die ArrayNr
		}
		MouseListener move = new MouseListner();// Buttons werden MouseListener
												// hinzugefügt
		for (i = 0; i < 286; i++) {
			if (button[i].isEnabled() == true) {
				button[i].addMouseListener(move);
			}
		}

		Listener klick = new Listener(); // Buttons werden ActionListener
											// hinzugefügt
		for (i = 0; i < 286; i++) {
			button[i].addActionListener(klick);
		}
		reservieren.addActionListener(klick);
		resRueck.addActionListener(klick);

		SpeicherListener saveandreload = new SpeicherListener();
		speichern.addActionListener(saveandreload);
		laden.addActionListener(saveandreload);
		bSpeicherort.addActionListener(saveandreload);

		setSize(1200, 850);

		c.add(panelNorth, BorderLayout.NORTH); // Add Geschichte
		c.add(panelSouth, BorderLayout.SOUTH);
		c.add(panelWest, BorderLayout.WEST);
		c.add(panelEast, BorderLayout.EAST);
		c.add(panelCenter, BorderLayout.CENTER);
		setSize(1250, 900);

		Aktuallisieren();// Buttons werden Aktuallisiert

		speicherListe = new ArrayList<Platz>();// Die Speicherliste wird
												// initialisiert
	}

	// --------------------------------Speicher-Funktion---------------------------------------------

	public void speichern() {
		for (i = 0; i < platz.length; i++) {
			speicherListe.add(platz[i]);
		}
		try {
			XMLEncoder encoder = new XMLEncoder(new FileOutputStream(
					speicherort));
			encoder.writeObject(speicherListe);
			encoder.close();
		} catch (Exception e) {
			if (speicherort == null) {
				JOptionPane
						.showMessageDialog(c,
								"Bitte mit den Button \"Speichern unter...\" einen Speicherort festlegen");
			} else {
				JOptionPane.showMessageDialog(c, "Fehler beim Speichern");
			}
		}
	}

	// --------------------------------Lese-Funktion-------------------------------------------------
	public void lesen() {
		try {
			XMLDecoder decoder = new XMLDecoder(
					new FileInputStream(speicherort));
			speicherListe = (ArrayList<Platz>) decoder.readObject();
			decoder.close();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(c,
					"Fehler beim Lesen der Datei Speicherliste.xml");
		}
		for (i = 0; i < platz.length; i++) {
			platz[i] = speicherListe.get(i);
		}
		Aktuallisieren();
	}

	// --------------------------------Aktualliesieren-----------------------------------------------
	public void Aktuallisieren() {
		for (i = 0; i < 286; i++) {
			if (platz[i].isIstMakiert()) {
				button[i].setBackground(Color.yellow);
			}
			if (platz[i].isIstReserviert()) {
				button[i].setBackground(Color.BLUE);
			}
		}
	}

	// -------------------------Speicherortbestimmungs-Funktion------------------------------
	public void Speicherortbestimmung() {
			Speicherort speicherortbestimmung = new Speicherort();
			speicherort = speicherortbestimmung.Speicherortbestimmung();
			if(speicherort!="7859"){
				if(speicherort.endsWith(".xml")==true){
					
				}else{
					speicherort=speicherort+".xml";
				}				
			}else{
				
			}
		
	}

	// -----------Funktionen für die Mausbewegungen
	class MouseListner implements MouseListener {

		@Override
		public void mouseClicked(MouseEvent e) { // wird ausgeführt wenn die
													// Maus geklickt und wieder
													// losgelassen wurde

		}

		@Override
		public void mouseEntered(MouseEvent e) { // Maus wird in ein Bereich
													// bewegt
			for (i = 0; i < platz.length; i++) {
				if (e.getSource().equals(button[i])) {
					if (platz[i].getName() != null) {
						namensausgabe.setText(platz[i].getName());
					}
				}
			}
		}

		@Override
		public void mouseExited(MouseEvent e) { // Maus wird aus einen Bereich
												// bewegt

		}

		@Override
		public void mousePressed(MouseEvent e) { // Maustaste wird gedrückt

		}

		@Override
		public void mouseReleased(MouseEvent e) {// Maustaste wird losgelassen

		}

	}

	// --------------------------------Button-Funktionen---------------------------------------------

	class Listener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			setSpeicher = false;// !!!!ACHTUNG!!!!!!Alles andere
								// Button-Funktionen erst ab hier schreiben
			if (e.getSource().equals(reservieren)) { // Reservieren
				for (i = 0; i < 286; i++) {
					if (platz[i].isIstMakiert() == true
							&& platz[i].isIstReserviert() == false) {
						platz[i].setIstReserviert(true);
						platz[i].setName(eingabe.getText());
						button[i].setBackground(Color.BLUE);
					}
				}
			}
			if (e.getSource().equals(resRueck)) { // Reservierung
													// rückgänigmachen
				if (setR == false) {
					resRueck.setBackground(Color.RED);
					setR = true;
				} else {
					if (setR == true) {
						resRueck.setBackground(null);
						setR = false;
					}
				}
			}
			for (i = 0; i < 286; i++) { // Platz makieren
				if (e.getSource().equals(button[i])) {
					// if (eingabe.getText() != null||eingabe.getText()!="") {
					if (setR == true) {
						platz[i].setIstMakiert(false);
						platz[i].setIstReserviert(false);
						button[i].setBackground(null);
						platz[i].setName(null);
					} else {
						if (platz[i].isIstMakiert() == false
								&& platz[i].isIstReserviert() == false) {
							button[i].setBackground(Color.yellow);
							platz[i].setIstMakiert(true);
						} else {
							if (platz[i].isIstMakiert() == true
									&& platz[i].isIstReserviert() == false) {
								platz[i].setName("");
								button[i].setBackground(null);
								platz[i].setIstMakiert(false);
							}
						}
					}
				}
			}
		}

	}

	class SpeicherListener implements ActionListener { // Button-Funktionen für
														// Speichern und Laden

		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getSource().equals(speichern)) { // Speichern
				speichern();
				setSpeicher = true;
			}
			if (e.getSource().equals(laden)) { // Laden der Daten
				if (setSpeicher == true) {
					Speicherort speicherortbestimmung = new Speicherort();
					speicherort = speicherortbestimmung.Ladeortbestimmung();
					if (speicherort != "7859") {
						lesen();
						Aktuallisieren();
					}
				} else {
					JOptionPane.showMessageDialog(c,
							"Sie müssen noch Speichern");
				}
			}
			if (e.getSource().equals(bSpeicherort)) {
				Speicherortbestimmung();
				speichern();
			}
		}

	}
}
und hier noch die Klassen Platz, Haupt und Speicherort

Java:
ublic class Platz {
	private String name;							//Namensspeicher
	private boolean istMakiert;		//"istMkiert" zeigt ober der Button makiert ist oder nicht; 
	private boolean istReserviert;	//"istReserviert" zeigt ob der Button fest Reserviert ist;
	private boolean setReset;		//"setReset" zeigt ob das löschen von Reservierungen aktiv ist
	private boolean setRs;			//"setSpezial" zeigt an ob das ein Rollstuhlplatz ist
	private int platzNr;			//"platzNr" gibt die Jeweilige PlatzNr an
	private int arrayNr;			//"arrayNr" gibt die Stelle im Array an 
	
	
	
	public int getArrayNr() {
		return arrayNr;
	}
	public void setArrayNr(int arrayNr) {
		this.arrayNr = arrayNr;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public boolean isIstMakiert() {
		return istMakiert;
	}
	public void setIstMakiert(boolean istMakiert) {
		this.istMakiert = istMakiert;
	}
	public boolean isIstReserviert() {
		return istReserviert;
	}
	public void setIstReserviert(boolean istReserviert) {
		this.istReserviert = istReserviert;
	}
	public boolean isSetReset() {
		return setReset;
	}
	public void setSetReset(boolean setReset) {
		this.setReset = setReset;
	}
	public int getPlatzNr() {
		return platzNr;
	}
	public void setPlatzNr(int platzNr) {
		this.platzNr = platzNr;
	}
	public boolean isSetRs() {
		return setRs;
	}
	public void setSetRs(boolean setRs) {
		this.setRs = setRs;
	}
	
	
}

Java:
import javax.swing.JFileChooser;


public class Haupt {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Layout layout=new Layout();	
	}
}

Java:
import java.io.File;

import javax.swing.JFileChooser;

public class Speicherort {
	private int rueckgabewert;
	private File test;

	public Speicherort() {

	}
//---------Speichern-------------------------------
	public String Speicherortbestimmung() {
		JFileChooser speicherort = new JFileChooser();
		rueckgabewert = speicherort.showSaveDialog(null);
		if (rueckgabewert == JFileChooser.APPROVE_OPTION) {
			System.out.println(speicherort.getSelectedFile().getName());
			test = speicherort.getSelectedFile();
			return test.getAbsolutePath();
		}else{
			return "7859";
		}
	}
//-------Laden--------------------------------------
	public String Ladeortbestimmung() {
		JFileChooser speicherort = new JFileChooser();
		rueckgabewert = speicherort.showOpenDialog(null);
		if (rueckgabewert == JFileChooser.APPROVE_OPTION) {
			System.out.println(speicherort.getSelectedFile().getName());
			test = speicherort.getSelectedFile();
			return test.getAbsolutePath();
		}else{
			return "7859";
		}
	}
}
 
Wahrscheinlich könnte man das mit einem GridBagLayout oder GroupLayout lösen.
Bin mir da aber noch nicht ganz sicher. Ich nehme an, dass du den Saal auf deiner GUI abbilden möchtest. Hast du mal noch eine Grafik, wie die Platzverteilung im Saal ist?
Durch das Ziehen am Fenster baut sich auch der Saal um...

Du könntest versuchen dem Panel oder den Buttons eine minimale Größe vorgeben, die es/sie haben darf/dürfen.
setMinimumSize()

...oder das Fenster vor Vergrößern/Verkleinern schützen.
setResizable()

Man könnte aber auch die ganze Sache ohne Button machen und die Plätze in ein Panel zeichnen.
Da hättest du zumindest die volle Kontrolle über die Objekte, die du zeichnest.
 
60% der Bildschirmgröße bspw. so:
Java:
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(dim.width * 60 / 100, dim.height * 60 / 100);
 
Du kannst den Rahmen um den Inhalt ändern ->
Code:
setMargin(new Insets(...))
Du kannst die bevorzugte Größe einstellen ->
Code:
setPreferredSize(new Dimension(...))
Du kannst die minimal gewünschte Größe einstellen ->
Code:
setMinimumSize(new Dimension(...))
Du kannst die maximal gewünschte Größe einstellen ->
Code:
setMaximumSize(new Dimension(...))
etc.

Möglicherweise hilft es auch, wenn du auf die Art und Weise die Dimensionen deines Panel festlegst.

Schau mal in die API-Doc, ob ich noch was vergessen habe.
Einige Einstellungen haben bei bestimmten LayoutManagern wegen ihrer Stategie zur Anordnung keine Wirkung.
 

Neue Themen


Zurück
Oben