2D-Grafik Canvas Problem(Größe)

Shacony

Mitglied
Ich habe folgendes Problem:

Ich versuche ein Canvas (der größe 800x600) in ein JFrame zu packen um dieses dann zum Zeichnen zu benutzen. Wenn ich jedoch
am Ende nachfrage, ist die Höhe und die Breite des Canvas 10 Pixel größer als angegeben!
-- Dies trat bei Windows 7 64bit auf!

Wenn ich nun den gleichen Code auf meinem macbook ausführe, dann stimmt die Größe des Canvas wieder.
Was läuft hier falsch? Ich schätze ich übersehe hier etwas ganz offensichtliches, jedoch komme ich nicht darauf da es auf meinem
macbook richtig läuft und auf meinem Windows pc nicht.

Die Java version des macbooks ist 1.6.0_29
Die Java version des Windows pc's ist 1.6.0_31 <- Eventuell ein Problem dieses updates?

Und schließlich der Code den ich verwende (vereinfacht, jedoch gleiches Ergebnis):
Java:
import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;

public class Weird {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		Canvas canvas = new Canvas();
		int width = 800;
		int height = 600;
		canvas.setBounds(0, 0, width, height);
		canvas.setMaximumSize(new Dimension(width, height));
		canvas.setMinimumSize(new Dimension(width, height));
		canvas.setIgnoreRepaint(true);
	
		frame.add(canvas);
		frame.pack();
		frame.setResizable(false);
		frame.setVisible(true);
		
		canvas.createBufferStrategy(2);
		System.out.println(canvas.getWidth());
		System.out.println(canvas.getHeight());
	}
}
 

Shacony

Mitglied
Danke für die Antwort.

Diesen Thread habe ich mir schon angeschaut. Ich frage jedoch nicht die Größe des Fensters ab, sondern die Größe von dem Inhalt des Fensters. Ich gebe die Größe des JFrames nicht an. Ich sage, ich möchte ein Canvas, das 800x600 groß ist in diesem JFrame haben, und das JFrame soll dann mit pack() sich selbst um die richtige JFrame-Größe kümmern. Bei MacOSX passt alles, bei Windows 64bit nicht, und zwar um genau 10px (width und height jeweils 10px größer) nicht.
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
ich möchte ein Canvas, das 800x600 groß ist in diesem JFrame haben, und das JFrame soll dann mit pack() sich selbst um die richtige JFrame-Größe kümmern.
Dann musst du deinem Canvas die Größe mit
Code:
setPreferredSize()
setzen, nicht mit
Code:
setMaximumSize()
oder
Code:
setBounds()
.

Code:
setMaximumSize()
bedeutet, dass dein Fenster auch kleiner werden darf...
Code:
setBounds()
funktioniert hier nur im Zusammenhang mit "NullLayout".
Auf keinen Fall
Code:
setLayout(null);
setzen! "NUllLayout" ist das letzte, womit du deine GUIs zusammenbauen solltest.

Und auch das beachten, was Marco13 anklingen ließ. Auch wenn immer wieder behauptet wird, dass man (außer RootPaneContainer) neuerdings AWT- und Swing-Komponenten miteinander mischen kann, ist es dennoch wenig zweckmäßig.
Dazu FAQ: http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/4650-awt-swing-mischen.html
 

Shacony

Mitglied
Danke schonmal für die Antworten, scheint wohl wirklich an AWT+Swing zu liegen. Auch mit PreferredSize() tritt der selbe Fehler auf. Erst wenn ich das JFrame auf NullLayout setze macht das Canvas auch das was ich will. Problem dabei ist nur, dass dann das JFrame nichtmehr von selber die richtige Größe um das Canvas setzt.

Ich möchte das Canvas nicht zum Zeichnen von Guis benutzen, ich möchte dies als Fenster für Spiele benutzen, mit active Rendering. Im Fullscreen hatte ich bis jetzt keine Probleme, da habe ich kein Canvas benutzt etc, da konnte ich direkt ins JFrame zeichnen mit bufferstrategy.getDrawGraphics() etc.

Ich dachte Canvas wäre ideal da es auch eine createBufferstrategy eben dann die getDrawGraphics Funktion beinhaltet. Gibt es eine Möglichkeit mit JComponent etwas ähnliches zu machen oder muss man wirklich von paint() ableiten? Wäre für mich nur allerletzte Option da ich meinen bestehenden Code auf das Zeichnen in das Graphics Objekt schon fertig habe.

UPDATE:

Das gleiche Problem tritt auf wenn ich ein JPanel statt des Canvas benutze! Ich bin echt ratlos ???:L

Java:
import java.awt.Dimension;

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

public class Weird {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		int width = 800;
		int height = 600;
		panel.setPreferredSize(new Dimension(width, height));
		panel.setIgnoreRepaint(true);
	
		frame.add(panel);
		frame.pack();
		frame.setResizable(false);
		frame.setVisible(true);
		
		System.out.println(panel.getWidth());
		System.out.println(panel.getHeight());
	}
}

UPDATE2:

Ich habe herausgefunden, an was es gelegen hat. Wenn ich die Zeile "setResizable(false)" rausnehme, dann passt die Größe des Canvas UND des JPanels wieder. Ich habe jedoch keine Ahnung warum "setResizable(false)" Auswirkungen auf die Größe des inneren Fensters haben sollte. Gibt es eine andere Möglichkeit als setResizable() die Größenveränderung eines Fensters zu unterbinden?

UPDATE3(letztes Update):

Bin nun ziemlich schnell auf die Lösung gekommen: Die pack() Methode muss ganz am Ende ausgeführt werden (vor setVisible natürlich), dann kommt man auf das gewünschte Ergebnis. Mir ist schleierhaft warum setResizable(false) etwas an der Größe von IRGENDWAS ändern sollte, aber ruft man pack() nicht hinter dieser Methode auf, dann bekommt man Probleme. Interessant ist auch, das setResizable(true) die Größe nicht ändert (auch wenn man setResizable(false);setResizable(true); macht, dann funktioniert auch alles wie gehabt).

Ich markier das Thema dann mal als erledigt.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Nur überflogen, aber...
Mir ist schleierhaft warum setResizable(false) etwas an der Größe von IRGENDWAS ändern sollte

Das Problem hatte ich auch mal: Da ändert sich AFAIR der Rand (d.h. er wird schmaler - der Mit der Maus greifbare ist etwas breiter). War in meinem Fall auch ziemlich blöd, weil ich genau eine fixe Größe für ein Video gebraucht hab ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
B Graphics und Canvas - Problem AWT, Swing, JavaFX & SWT 2
G Canvas im JPanel - "Freie" Fläche Problem AWT, Swing, JavaFX & SWT 10
M canvas problem AWT, Swing, JavaFX & SWT 7
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
W Clear Canvas und anschließendes neues Erstellen von Objekten auf Canvas aus ArrayList AWT, Swing, JavaFX & SWT 4
W Canvas oder Polygone? AWT, Swing, JavaFX & SWT 3
Monokuma Canvas Form entfernen AWT, Swing, JavaFX & SWT 2
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
M Internal Frames und Canvas-Element AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
M Halbkreiszeichnen(Canvas) - Diesen mit Mouseevents bestücken AWT, Swing, JavaFX & SWT 3
dereki2000 AWT Canvas zeichnet nicht AWT, Swing, JavaFX & SWT 7
D Canvas oder scene graph? AWT, Swing, JavaFX & SWT 16
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
Prafy AWT Klickbare Bereiche auf Canvas AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX Canvas einfaches Zeichenprogramm AWT, Swing, JavaFX & SWT 7
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
L JavaFX Canvas max size? AWT, Swing, JavaFX & SWT 1
J JavaFX Rendering von Canvas sehr langsam AWT, Swing, JavaFX & SWT 2
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
C Java FX Canvas missing getGraphicContext2D AWT, Swing, JavaFX & SWT 5
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
S JavaFX Canvas - nur eine Figur auf der Zeichenfläche färben? AWT, Swing, JavaFX & SWT 1
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
A JavaFX Menubar wird von Canvas überzeichnet AWT, Swing, JavaFX & SWT 8
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
Luk10 KeyBindings mit Canvas? AWT, Swing, JavaFX & SWT 3
B LookAndFeel GWT: Canvas in TabSet nicht sichtbar AWT, Swing, JavaFX & SWT 2
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
T Canvas clipping AWT, Swing, JavaFX & SWT 4
S 2 Canvas übereinander AWT, Swing, JavaFX & SWT 2
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
M Wofür Canvas? AWT, Swing, JavaFX & SWT 5
frankred Swing Canvas nach "Window-resize" neu Zeichnen lassen wegen Anzeigefehler AWT, Swing, JavaFX & SWT 4
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
lumo SWT Canvas transparent AWT, Swing, JavaFX & SWT 4
2 AWT Zeichnen in Canvas AWT, Swing, JavaFX & SWT 5
B 2D-Grafik Malen/übermalen mit Canvas AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
S Canvas-Inhalt in Laufzeit ändern AWT, Swing, JavaFX & SWT 6
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
T AWT canvas AWT, Swing, JavaFX & SWT 3
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
T SWT Canvas Koordinaten per MouseMove auslesen AWT, Swing, JavaFX & SWT 1
H Zeichnen auf smartgwt Canvas AWT, Swing, JavaFX & SWT 4
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
K Swing Sinuskurve zeichnen auf Canvas AWT, Swing, JavaFX & SWT 2
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
D Canvas soll angezeigtes jpg-Bild aktualisieren AWT, Swing, JavaFX & SWT 4
N zeichnen auf awt canvas AWT, Swing, JavaFX & SWT 9
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
J Canvas Inhalt als Bild speichern! AWT, Swing, JavaFX & SWT 16
T zeichnen mit canvas AWT, Swing, JavaFX & SWT 3
S repaint im Canvas AWT, Swing, JavaFX & SWT 3
D Canvas und Buttons AWT, Swing, JavaFX & SWT 20
P Zeichnen in Canvas und Neuzeichnen AWT, Swing, JavaFX & SWT 3
G Canvas + Swing-Objekte AWT, Swing, JavaFX & SWT 5
C canvas.draw zeichne ohne ausfüllen AWT, Swing, JavaFX & SWT 9
P Canvas in JFrame mit GridLayout AWT, Swing, JavaFX & SWT 4
T Canvas gegen Container austauschen --> GUI fehlt AWT, Swing, JavaFX & SWT 4
P Canvas Inhalt löschen AWT, Swing, JavaFX & SWT 4
D Canvas über JMenuBar AWT, Swing, JavaFX & SWT 7
F ToolTip auf Canvas AWT, Swing, JavaFX & SWT 2
L Probleme mit mehreren Canvas: Überlagerungseffekte? AWT, Swing, JavaFX & SWT 5
N Zu hoher Speicherverbrauch beim Zeichnen (Canvas) AWT, Swing, JavaFX & SWT 5
T Textfeldwert in canvas AWT, Swing, JavaFX & SWT 4
D cannot access Canvas AWT, Swing, JavaFX & SWT 13
G Canvas in SWT aktualisieren AWT, Swing, JavaFX & SWT 21
S AUF Canvas Zeichnen Fehler! AWT, Swing, JavaFX & SWT 10
G Canvas löschen AWT, Swing, JavaFX & SWT 15
H Sowas wie ein Canvas AWT, Swing, JavaFX & SWT 3
D Inhalt einer Canvas löschen (SWT.NO_BACKGROUND gesetzt) AWT, Swing, JavaFX & SWT 3
G GridBagLayout mit Canvas-Positionsproblem AWT, Swing, JavaFX & SWT 5
J Canvas und JTextField AWT, Swing, JavaFX & SWT 2
T erkennen ob innerhalb oder außerhalb von canvas gezeichnet AWT, Swing, JavaFX & SWT 2
S Problemen mit Canvas-Objekten im GridLayout AWT, Swing, JavaFX & SWT 8
P Tranparentes Canvas AWT, Swing, JavaFX & SWT 8
P Inhalt eines Canvas verkleinern AWT, Swing, JavaFX & SWT 3
G Canvas, JMenu, und BufferStrategy AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben