Fenstergröße automatisch skalieren

b1zarRe

Bekanntes Mitglied
Hi,

Ich habe eine Aufgabe, in welcher ich ein Balkendiagramm erstellen muss. (Das habe ich auch realisiert mit Graphics). Ich habe es auch geschafft, dass sich alle Elemente (Kästchen, Legende etc.) prozentual verschiebt, wenn ich ein neues Fenster erstelle.

Jedoch sollen wir es hinbekommen, dass die Methode setResizable() auf true gesetzt werden sollen und beim skalieren zur Laufzeit alles sich direkt proportional skaliert. Ich glaube ich muss irgendetwas mit repaint() machen, finde aber nichts passendes zu dem Thema :/. Wie gesagt, leider dürfen wir nicht einfach das Fenster auf einer Größe lassen.
 
V

vanny

Gast
Also generell sind für sowas die LayoutManager zuständig.

Nun weiß ich aber nicht, wie du deine grafische Darstellung umgesetzt hast und ohne Code wird das dann wohl schwierig, dir da weiter zu helfen.
 

b1zarRe

Bekanntes Mitglied
Naja, Layoutmanager hatten wir noch nicht besprochen und dürfen die somit nicht einsetzen.
Code ist nichts besonderes hier mal als Pseudo-Code weil ich den Originalen grade nicht hierhabe:

Java:
  public EinFramet() {
        super();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setBounds(100, 150, 500, 250);
        this.setTitle("Mein großes Fenster");
        this.getContentPane().add(new RechteckJPanel (10,20,30,40));
    }

    public class RechteckJPanel extends JPanel {

        private int x, y, w, h;

        RechteckJPanel(int x, int y, int w, int h) {
            super();
            this.setRect(x, y, w, h);
        }

        void setRect(int x, int y, int w, int h) {
            this.x = x;
            this.y = y;
            this.w = w;
            this.h = h;
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawRect(x, y, w, h);
            g.drawLine(10, 10, 100, 102);
            
            Graphics2D neuesG = (Graphics2D) g; //2d Grafik
            neuesG.drawString("Ein Text", 1000, 20);
            
        }
    }


    public static void main(String[] args) {
        einFramet jF = new einFrame();
        jF.setVisible(true);
        
    }
}
 
V

vanny

Gast
Hihi,
sry wenn ich dich enttäuschen muss aber du benutzt bereits LayoutManager, denn dein JFrame hat default ein BorderLayout und dein JPanel ein FlowLayout.

Ich muss jetzt leider zur Arbeit, melde mich aber heute Abend nochmal falls dann noch Bedarf besteht.

Gruß Vanny
 

jgh

Top Contributor
so könnte man es bspw. machen, den Text habe ich jetzt einfach reingesetzt...wenn du den bspw. in deinem Rechteck haben willst, musst halt noch ein wenig nachdenken^^

Java:
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class RechteckJPanel extends JPanel {

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawRect(this.getX() + 20, this.getY() + 20, this.getWidth() - 40,
				this.getHeight() - 40);
		g.drawLine(getX(), getY(), getWidth(), getHeight());

		Graphics2D neuesG = (Graphics2D) g; // 2d Grafik
		String s = "Ein Text";
		neuesG.drawString(s, getWidth() - 100, getHeight() - 100);

	}

	public static void main(String[] args) {
		EinFrame jF = new EinFrame();
		jF.setVisible(true);

	}
}

class EinFrame extends JFrame {
	public EinFrame() {
		super();
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setBounds(100, 150, 500, 250);
		this.setTitle("Mein großes Fenster");
		RechteckJPanel rjp = new RechteckJPanel();
		this.getContentPane().add(rjp);
	}
}
 

b1zarRe

Bekanntes Mitglied
Kannst Du vielleicht erläutern warum das so klappt?! Bin ein wenig überrascht, weil ich in dem Code nichts mit repaint() finde. Liegt es daran, dass du this.getX() etc. eingefügt hast?! Und Java jedes mal das "neu berechnet"?

Und falls ja, cool danke... Gibt es eine alternative Methode dies mit repaint() zu realisieren??? Weil unser Prof. das 1-2 mal erwähnt hatte und ich es gerne auch so lernen würde (-> Klausur).
 

jgh

Top Contributor
genau, das liegt daran das ich jetzt keine festen Werte habe, sondern in der paintComponent mir die Größe und Positionen vom JPanel hole.

Die paintComponent - Methode wird aufgerufen, wenn sich das JPanel, bzw. das RechteckJPanel neuzeichnen soll, bspw. beim resizen.

Entsprechend dem Layoutverhalten des BorderLayouts (Default beim JFrame) erhält die geaddete Komponente allen zur verfügung stehenden Platz. Änderst du die Größe des Frames, wird die paintComponent -Methode aufgerufen und das JPanel/RechteckJPanel soll sich neu zeichnen.
get(X), bzw. this.getX() ist das gleiche...

repaint müsstest du nur aufrufen, wenn du irgendwas änderst ohne das sich was neuzeichnen müsste.
Bspw. könnte man bei Knopfdruck den Text ändern, solange sich die Komponente aber nicht neuzeichnen muss, wird der neue Text nicht angezeigt. Hier unten im Bspcode kannst du nach klicken des Buttons den Frame vergrößern, verkleinern, maximieren oder minimieren und der "neue" Text wird dann erst angezeigt. Wenn du das "repaint()" einkommentierst und somit ein neuzeichnen anforderst, wird der geänderte Text sofort angezeigt.
Im Bsp ist es natürlich nur 1x möglich dieses Verhalten aufzuzeichnen.

Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class RechteckJPanel extends JPanel {
	String s = "Ein Text";

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawRect(this.getX() + 20, this.getY() + 20, this.getWidth() - 40,
				this.getHeight() - 40);
		g.drawLine(getX(), getY(), getWidth(), getHeight());

		Graphics2D neuesG = (Graphics2D) g; // 2d Grafik

		neuesG.drawString(s, getWidth() - 150, getHeight() - 100);

	}

	public static void main(String[] args) {
		EinFrame jF = new EinFrame();
		jF.setVisible(true);

	}
}

class EinFrame extends JFrame {
	public EinFrame() {
		super();
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setBounds(100, 150, 500, 250);
		this.setTitle("Mein großes Fenster");
		final RechteckJPanel rjp = new RechteckJPanel();
		JButton b = new JButton("ändere Text");
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				rjp.s = "Ein anderer Text";
				// repaint();

			}
		});
		add(b, BorderLayout.NORTH);

		this.getContentPane().add(rjp);

	}
}
 
Zuletzt bearbeitet:

b1zarRe

Bekanntes Mitglied
Danke schonmal für die Hilfe!!! Ich glaube ich habe es gecheckt! :)

Aber sofort kam das nächste Problem:
Wenn ich zb. in der Statistik ein Balken erzeuge soll direkt dadrunter zb. eine Jahreszahl stehen UND wenn ich das Fenster vergrößer oder verkleiner soll es prozentuell immer gleich bleiben... das klappt bei mir nur bedingt, da x Positionsachse sich kaum ändert (was auch richtig ist) aber die y Achse des Textes zum Rand des Quadrats immer anders und nicht prozentuell gleich bleibt... Hast du da vielleicht eine Idee?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Fenstergröße nach maximieren erkennen AWT, Swing, JavaFX & SWT 6
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16
K JavaFX Fenstergröße ändert sich (Gluon - SceneBuilder) AWT, Swing, JavaFX & SWT 23
J JavaFX JavaFX Elemente an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 5
K JavaFX Titel und Fenstergröße aus Main.java übergeben AWT, Swing, JavaFX & SWT 0
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
H preferred size abhängig von Fenstergröße berechnen AWT, Swing, JavaFX & SWT 11
J Java - dynamische Anpassung an Fenstergröße? AWT, Swing, JavaFX & SWT 4
G jTable mit automatischer Zeilenhöhe je nach Fenstergröße. AWT, Swing, JavaFX & SWT 3
W Swing Optimale Fenstergröße festlegen AWT, Swing, JavaFX & SWT 4
H Fenstergröße bei Mac und Windows gleich einstellen? AWT, Swing, JavaFX & SWT 3
P Swing Bild an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 11
A Swing Fenstergröße mittels Menü verändern AWT, Swing, JavaFX & SWT 3
L Swing Fenstergröße setzen (Netbeans) AWT, Swing, JavaFX & SWT 6
N Swing Dynamisches Verhalten bei Änderung Fenstergröße AWT, Swing, JavaFX & SWT 6
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
B Swing: letztes Element wird immer auf Fenstergröße gezogen AWT, Swing, JavaFX & SWT 3
S Swing Fenstergröße AWT, Swing, JavaFX & SWT 5
H JFrame minimale Fenstergröße AWT, Swing, JavaFX & SWT 7
T Feste Fenstergröße AWT, Swing, JavaFX & SWT 3
G Fenstergröße wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
B Fenstergröße anpassen AWT, Swing, JavaFX & SWT 7
P Frame - falsche Fenstergröße durch Rahmen? AWT, Swing, JavaFX & SWT 5
M Fenstergröße min/max? AWT, Swing, JavaFX & SWT 5
J Fixes Layout auf beliebige Fenstergröße skalieren AWT, Swing, JavaFX & SWT 2
M TextArea relativ zur Fenstergröße AWT, Swing, JavaFX & SWT 14
G Zeichnung verschwindet nach verändern der Fenstergröße. AWT, Swing, JavaFX & SWT 2
G Wie Fenstergröße während Fenstergrößenänderung auslesen? AWT, Swing, JavaFX & SWT 2
P SWT: Textfeld an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 3
K Fenstergröße soll nicht verändert werden AWT, Swing, JavaFX & SWT 2
D Fenstergröße! AWT, Swing, JavaFX & SWT 17
F Listener für Fenstergröße (SWT) AWT, Swing, JavaFX & SWT 5
G Fenstergröße nur nach oben veränderbar einstellen AWT, Swing, JavaFX & SWT 7
D JTable-Größe mit Fenstergröße verändern. AWT, Swing, JavaFX & SWT 4
M GUI-Repaint nach Änderung der Fenstergröße AWT, Swing, JavaFX & SWT 2
F Fenstergröße in Swing setzen ? AWT, Swing, JavaFX & SWT 12
JavaSchmecktLecker JavaFX JavaFX Ordner automatisch verlinken AWT, Swing, JavaFX & SWT 2
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
F JavaFX textField Ausgabe automatisch kopieren AWT, Swing, JavaFX & SWT 7
J Gridpane Breite in Scrollpane automatisch anpassen AWT, Swing, JavaFX & SWT 2
L ComboBox Wert automatisch auswählen AWT, Swing, JavaFX & SWT 6
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
I CSS - backgroundImage - Größe automatisch an den Container anpassen AWT, Swing, JavaFX & SWT 1
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
L Java FX Scrollpane automatisch resizen AWT, Swing, JavaFX & SWT 3
S Swing Bedienelemente ordnen sich automatisch neu an AWT, Swing, JavaFX & SWT 2
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
S Buttons und TextField automatisch vergrößern AWT, Swing, JavaFX & SWT 8
KilledByCheese 2D-Grafik Feld automatisch bewegen, in zeitabständen AWT, Swing, JavaFX & SWT 7
C AWT Textfelder werden nicht automatisch angezeigt AWT, Swing, JavaFX & SWT 2
G Properties automatisch laden AWT, Swing, JavaFX & SWT 10
W Bei Programmstart jRadioButton automatisch auswählen AWT, Swing, JavaFX & SWT 2
S JavaFX Fenstergrösse automatisch Speichern und Laden AWT, Swing, JavaFX & SWT 4
2 Zeit Differenz automatisch aktualisieren AWT, Swing, JavaFX & SWT 1
C Geloest: JTextfield: Titel automatisch entfernen, sobald Text eingegeben wird AWT, Swing, JavaFX & SWT 1
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
S Swing Automatisch 2px Rahmen in Windows 8 AWT, Swing, JavaFX & SWT 0
G Swing ComboBoxItem automatisch wählen AWT, Swing, JavaFX & SWT 4
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
0 JTable Spaltenbreite automatisch an Inhalt anpassne geht nicht AWT, Swing, JavaFX & SWT 3
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
D JTable width automatisch anpassen AWT, Swing, JavaFX & SWT 4
R Swing Wie kann man Internal Frames automatisch ausrichten lassen? AWT, Swing, JavaFX & SWT 3
E JToggleButton automatisch nach drücken loslassen AWT, Swing, JavaFX & SWT 3
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
C SWT-Elemente an View-Fenster angleichen und automatisch resizen AWT, Swing, JavaFX & SWT 3
C Textfeld automatisch befüllen AWT, Swing, JavaFX & SWT 6
R JTable: Spaltenbreite automatisch anpassen AWT, Swing, JavaFX & SWT 3
J SWT Dialog in Dialog automatisch öffnen AWT, Swing, JavaFX & SWT 19
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
U JComboBox automatisch zuklappen AWT, Swing, JavaFX & SWT 7
Y JCheckBoxen automatisch anlegen AWT, Swing, JavaFX & SWT 6
M Swing Eingabe auf JTextField automatisch ausgeben auf JLabel AWT, Swing, JavaFX & SWT 2
J Swing JList: Neue Zeilen mit fireIntervalAdded sind automatisch selektiert AWT, Swing, JavaFX & SWT 2
M LayoutManager JTextfield vergrößern sich automatisch AWT, Swing, JavaFX & SWT 4
T Swing Dialoginhalt automatisch anpassen während Größenänderung AWT, Swing, JavaFX & SWT 2
N ActionListener automatisch selektieren AWT, Swing, JavaFX & SWT 6
N JFrame mit Elementen an die Bildschirmgröße automatisch anpassen AWT, Swing, JavaFX & SWT 3
aze JTable automatisch vergrößern wenn das zugehörige JFrame vergrößert wird AWT, Swing, JavaFX & SWT 13
F Button soll automatisch geklickt werden AWT, Swing, JavaFX & SWT 3
R JSplitPane automatisch ausblenden AWT, Swing, JavaFX & SWT 13
H Schriftgröße automatisch an JLabel anpassen AWT, Swing, JavaFX & SWT 6
S JTable Float Column fuegt automatisch Punkt hinzu wenn man Zahlen eingibt. AWT, Swing, JavaFX & SWT 21
G SWT - TextFeld automatisch aktualisieren AWT, Swing, JavaFX & SWT 15
G JSplitPane unf JTable automatisch anpassen AWT, Swing, JavaFX & SWT 2
K JFrame + 2 Bildschirme -> automatisch auf einem Bildschir AWT, Swing, JavaFX & SWT 5
A Programm automatisch in den Vordergrund AWT, Swing, JavaFX & SWT 5
G jTable, spezille Zelle automatisch füllen AWT, Swing, JavaFX & SWT 13
S JList automatisch scrollen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben