Problem: Größe von Komponenten festlegen

Status
Nicht offen für weitere Antworten.

ernst

Top Contributor
Hallo allerseits,
in dem Programm unten (das einwandfrei funktioniert) werden verschiedene Größen festgelegt:
// Größe eines Panels
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
// Größe JFrame -Objekt
f.setSize(550,550);
// Größe eines images
myimg = createImage(sx, sy);


Fragen:
1)
Warum gibt
sx = this.getSize().width;
sy = this.getSize().height;
die folgenden Werte:
sx = 542
sy = 516
Die Zeichenfläche wurde doch auf 400 x 400 festgelegt!!

2)
Egal, was man in
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
als Größe festlegt, die Zeichenfläche wird optisch auf dem _ganzen_ JFrame - Objekt (550 x 550) dargestellt. Welchen Sinn hat dann die Festlegung von den 400 x 400 ?
Wo wirkt sich dies optisch aus?

3)
Warum wird mit
sx = this.getSize().width;
sy = this.getSize().height;
myimg = createImage(sx, sy);
das Image auf diese Größe festgesetzt, wo doch mit
myimg = createImage(100, 100);
oder irgendeinem anderen Wert optisch genau das gleiche passiert?

Ich verstehe die dahinter steckende Logik nicht!

mfg
Ernst



-------------------------------------------------------------------------------
[HIGHLIGHT="Java"]package verzoegertzeichnen3;

import java.awt.*;
import javax.swing.*;

public class MainVerzoegertZeichnen3 {
public static void main(String[] args){
int kreisNummer;
kreisNummer = 1;
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
JFrame f = new JFrame();
f.setSize(550,550);
f.getContentPane().add(myZf);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);

while(kreisNummer<=10){
try{
Thread.sleep(10);
}
catch(Exception e){}
kreisNummer=kreisNummer+1;

MyRunnable myR = new MyRunnable(myZf, kreisNummer);
// invokeLater() ist eine static-Methode
SwingUtilities.invokeLater(myR);
}
}
} [/HIGHLIGHT]


[HIGHLIGHT="Java"]class MyZeichenflaeche extends JPanel{
private int xpAnz;
private int ypAnz;
private int kreisNummer;
private Image myimg;
private Graphics myg;
private int sx;
private int sy;

public MyZeichenflaeche(int xpAnz, int ypAnz){
kreisNummer=0;
this.xpAnz=xpAnz;
this.ypAnz=ypAnz;
myimg=null;
}

public void setKreisNummer(int pKreisnummer){
kreisNummer=pKreisnummer;
}

public int getKreisNummer(){
return (kreisNummer);
}

public void male(){
if(myimg==null){
sx = this.getSize().width;
sy = this.getSize().height;
System.out.println("sx="+sx);
System.out.println("sy="+sy);
//myimg = createImage(100, 100);
myimg = createImage(sx, sy);
myg = myimg.getGraphics();
}
// Schreibzugriff auf myimg
myg.setColor(Color.red);
myg.drawOval(kreisNummer*20 , kreisNummer*20, 20, 20);
}

// ist im EDT
public void paintComponent(Graphics g){
// Lesezugriff auf myimg
g.drawImage(myimg,0,0,null);
}
}[/HIGHLIGHT]


[HIGHLIGHT="Java"]class MyRunnable implements Runnable{
private MyZeichenflaeche myZf;
private int kreisNummer;
public void run(){
// ist im EDT
// Schreibzugriff auf das myZf von main
// setzt kreisnummer von myZf in main !! auf einen neuen Wert !!!!
myZf.setKreisNummer(kreisNummer);
// Schreibzugriff auf mying
myZf.male();
// Lesezugriff auf mying in paintComponent
myZf.repaint();
}

public MyRunnable(MyZeichenflaeche pZeichenflaeche, int pKreisnummer){
myZf = pZeichenflaeche;
kreisNummer = pKreisnummer;
}
}[/HIGHLIGHT]
-------------------------------------------------------------------------------
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor

Fragen:
1)
Warum gibt
sx = this.getSize().width;
sy = this.getSize().height;
die folgenden Werte:
sx = 542
sy = 516
Die Zeichenfläche wurde doch auf 400 x 400 festgelegt!!

Die Größe des Frames ist aber auf einen anderen Wert gesetzt, und wenn man Layoutmanager verwendet (was standardmäßig der Fall ist) bringt ein setSize() nichts, und stattdessen wird die Größe der enthaltenen Componenten aus dem Layout und der Größe der übergeordneten Component berechnet.


2)
Egal, was man in
MyZeichenflaeche myZf = new MyZeichenflaeche(400, 400);
als Größe festlegt, die Zeichenfläche wird optisch auf dem _ganzen_ JFrame - Objekt (550 x 550) dargestellt. Welchen Sinn hat dann die Festlegung von den 400 x 400 ?
Wo wirkt sich dies optisch aus?

Bezieht sich fast auf das gleiche: ein JFrame (bzw. sein ContentPane) hat standardmäßig... ich glaub... ein BorderLayout, und die Zeichenfläche liegt im CENTER des BorderLayouts, und nimmt deswegen automatisch den gesamten verfügbaren Platz ein. Man könnte das verhindern, indem man ein 'null'-Layout verwendet, aber das ist nur SEHR selten angebracht. Wenn die Größe des JPanels soooo relevant ist, kannst du sagen
zeichenflaeche.setPreferredSize(new Dimension(400,400));
frame.add(zeichenflaeche);
frame.pack();
Durch das "pack" wird der Frame so groß, dass er seine enthaltenen Components mit ihrer bevorzugten (preferred) Size anzeigen kann.


3) Kapier' ich nicht.


LESEN: Using Layout Managers (The Java™ Tutorials > Creating a GUI with JFC/Swing > Laying Out Components Within a Container)
 

ernst

Top Contributor
1)
An den JFrame f wird die Zeichenfläche myZf "geklebt".
Was bedeutet dann konkret deine Aussage "und stattdessen wird die Größe der enthaltenen Componenten aus dem Layout und der Größe der übergeordneten Component berechnet." und wie wird dann sx und sy berechnet

2)
Du hast geschrieben: "Kapier' ich nicht".
Deswegen will ich mich genauer ausdrücken:

Es wird wie folgt sx und sy berechnet
a) sx = this.getSize().width;
b) sy = this.getSize().height;
und dann mit diesen Größen ein Bild erzeugt:
c) myimg = createImage(sx, sy);
Allerdings bekomme ich mit beliebigen von mir erfundenen Werten wie z.B. 100, 200 mit
d) myimg = createImage(100, 200);
optisch auf dem Bildschirm genau das gleiche.
Ich verstehe die dahinter steckende Logik nicht:
Warum erzeugt a) und b) und c)
das gleiche wie d) ??

mfg
Ernst
 

Marco13

Top Contributor
Was bedeutet dann konkret deine Aussage "und stattdessen wird die Größe der enthaltenen Componenten aus dem Layout und der Größe der übergeordneten Component berechnet." und wie wird dann sx und sy berechnet

Die Größe (sx = 542, sy = 516) wid berechnet, indem
1. Der Frame auf eine Gesamtgröße von 550,550 gesetzt wird (was du ja geschrieben hast)
2. Ausgerechnet wird, wie viel Platz in so einem Frame ist (d.h. es werden die Titelleiste und die Ränder abgezogen - ich weiß jetzt z.B. dass der linke Rand deines Frames genau 4 Pixel breit ist ;))
3. Der gesamte verfügbare Platz der - in diesem Fall - einzigen, in der Mitte liegenenden Component zugewiesen wird - darum wird diese Component (also die Zeichenfläche) genau (542,516) Pixel groß



2)
Du hast geschrieben: "Kapier' ich nicht".

Das hatte ich bei 3 geschrieben. Ich kapiere in erster linie nicht, was das "createImage" soll. Man SIEHT nichts, wenn man createImage aufruft. createImage erstellt nur ein Bild, mit der übergebenen Größe, aber das wird ja nirgendwo hingemalt - darum ist es optisch auf dem Bildschirm genau das gleiche , egal, wie groß das Bild ist, das man da erstellt (und nicht sieht...)
 

ernst

Top Contributor
Das hatte ich bei 3 geschrieben. Ich kapiere in erster linie nicht, was das "createImage" soll. Man SIEHT nichts, wenn man createImage aufruft. createImage erstellt nur ein Bild, mit der übergebenen Größe, aber das wird ja nirgendwo hingemalt - darum ist es optisch auf dem Bildschirm genau das gleiche , egal, wie groß das Bild ist, das man da erstellt (und nicht sieht...)

Du hast recht!
Danke für eure Antworten.
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Layout-Problem, Größe von Komponenten AWT, Swing, JavaFX & SWT 3
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
S 2D-Grafik Canvas Problem(Größe) AWT, Swing, JavaFX & SWT 6
hdi Custom Cursor: Problem mit Größe AWT, Swing, JavaFX & SWT 5
H Problem mit der Größe eines Dialogs mit ExpandBar AWT, Swing, JavaFX & SWT 2
A Problem der Größe von JCheckBox nach Hinzufügen eines Popups AWT, Swing, JavaFX & SWT 2
U Problem mit JButton (Position & Größe) AWT, Swing, JavaFX & SWT 7
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben