online 1
gast (50)

/ Forum / Anwendungen(Java,C++...)

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon MixMax vom 03.12.2019, 23:32 Options

Lösung

Java - richtige Fenstergröße mit Rahmen berechnen

Hallo Freunde der Kaffeetasse,

Ich habe ein Programm in Java 2 1.6.0 Update3 geschrieben, das als Hintergrund ein Bild verwendet. Nun möchte ich weder unten ein Stück abschneiden noch einen weissen Rand zwischen Bild und Rahmen haben.

mit setSize(x,y) bzw setBounds(0,0,x,y) (beides probiert)setze ich die größe des Fensters, allerdings gibts ein Problem:
Unter Vista ist die Höhe bei gleichen Zahlen 6 Pixel unterschiedlich gegenüber XP. Also schreibe ich das Programm für Vista, so wird unter XP 6 Pixel unten abgeschnitten. Schreibe ich für XP, habe ich unter Vista 6 Pixel Rand unten.

Da das Programm auch unter anderen Betriebssystemen laufen soll und eine unveränderbare Innengröße:

Wo kann ich einen Zahlenwert herbekommen um daraus abzuleiten wieviel Pixel bei setSize eingestellt werden müssen für ein Ränderloses Fenster.

MfG Rene


Antwort schreiben

Antwort 1 von mr_x_hacker vom 04.12.2019, 19:19 OptionsLösung

Lösung
Hi,

womit genau hast Du das Fenster gemacht? AWT, Swing, SWT...?

Meine Grundidee bei Bildern ist:
- Panel anlegen, Bild da drauf zeichnen (paint() überschreiben), setPreferredSize() mit der Größe des Bildes auf das Panel setzen...
- Panel in Frame/Window/whatever stecken, und pack() aufrufen...

Danach sollte es unter allen möglichen Systemen gleich aussehen...

Ciao Sascha

Antwort 2 von MixMax vom 04.12.2019, 22:10 Options

Nur awt.frame und awt.panel, ohne Swing...
Bei Panel ist das der mir immer Größe 0, 0 anzeigt oder eine Eingestellte....

Ich versuch das nochmal mit verschiedenen Layouts, atm ists
setLayout(new BorderLayout());

Antwort 3 von MixMax vom 04.12.2019, 23:48 Options

*kratzamkopf*

also ich habe vielleicht einen Weg gefunden rauszufinden wie groß das Fenster nun sein muss...

anstelle von:

setResizable(false);
setSize(151,97);


habe ich nun ein FlowLayout erstellt, pack die Fenstergröße passend (ohne elemente) mit einem bestimmten Abstand.
Da ich durch Abstand nur GERADE Zahlen hinbekommen habe, addiere ich zu dem was rauskommt noch +1 (da ich 151 Pixel brauch nicht 150)
Mit folgenden Befehlen:


setLayout(new FlowLayout(0, 72, 35));
pack();
setLayout(new BorderLayout());
setSize(getWidth()+1,getHeight()+1);


Ich hätte es ja gern einfacher gemacht aber ohne die Seitenabstände und bei Borderlayout macht mir der packbefehl einfach ein fenster mit mindestgröße (das was bei setSize(0,0) rauskommen würde) und einen einfachen Befehl - vielleicht "setInnersize(145, 71)" gibt es leider nicht..
(145,71 wäre übrigens das benötigte innenmaß, durch den Flowlayout abstand von 72 (144/2) und 35 (70/2) komme ich etwa auf mein gewünschtes maß und muss 1 px dazuaddieren.

wer eine Vereinfachung hiervon schreiben kann - immer her damit. Vielleicht gibt es ja den Befehl den ich suche aber ich hab ihn nicht gefunden.

Ich Teste das morgen auf der arbeit mal unter xp..

Für den vorschlag nochmal pack() zu versuchen hast dir n punkt verdient

Antwort 4 von mr_x_hacker vom 05.12.2019, 20:02 Options

Hi,

folgender Code erzeugt bei mir ein Fenster um ein genau 200x200 Pixel großes Panel:


    Frame frame = new Frame("TestFrame");
    Panel panel = new Panel();
    panel.setPreferredSize(new Dimension(200, 200));
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);


Die entscheidende Zeile ist setPreferredSize() - genau diese Size nutzt pack() nämlich, um die Größen zu berechnen... Ich hab Deinen Code oben nicht ganz verstanden, denke aber, dass Du mit den Größenangaben im FlowLayout diesen Effekt "gefaked" hast...

Du musst eigentlich nur setPreferredSize() auf das Panel mit dem Bild machen - eben mit den Maßen des Bildes... dann wird der Frame automatisch in der richtigen Größe um das Bild (Panel) rum platziert...

Ciao Sascha

Antwort 5 von MixMax vom 07.12.2019, 12:56 Options

hi nochmal,

Dank, also so geht es wenn - muss dann das panel nach dem pack() aber auf nicht sichtbar setzen da es die Grafik überdeckt...

Antwort 6 von mr_x_hacker vom 08.12.2019, 10:40 Options

Nu, Du sollst ja nicht einfach ein leeres Panel einfügen NUR um die Größe zu setzen, sondern der Component, auf der Deine Grafik gezeichnet ist, diese Größe setzen...! Da ich nicht weiß, wie Du die Grafik zeichnest, hab ich fürs Beispiel halt ein Panel genommen - setPreferredSize() geht aber auf allen Components...

Ciao Sascha

Ähnliche Themen

Excel: Rahmen bleiben schwarz
Masanja  02.02.2007 - 134 Hits - 1 Antwort

java runtime environment de-/installationsproblem
biojoerg  02.03.2007 - 147 Hits -

iceweasel / firefox: java installation
Sichtbarer  12.06.2007 - 220 Hits - 5 Antworten

*.java, wie aufrufen?
Marilana  17.01.2008 - 156 Hits - 2 Antworten

Java Script - Fenstergröße ändern
Computerfreaki  29.02.2008 - 74 Hits - 8 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 11:26:25 2026