Hallo erstmal zusammen,
Bin neu hier und würd euch gern sofort mit einem Problem bombadieren
, welches mir beim Schreiben eines einfachen Testprogramms wiederfahren ist:
Im Prinzip ist es ein JFrame mit einem JPanel und auf das ich zunächst ein Hintergrundbild male via Graphics2D Objekt und darüber lasse ich ein weiteres bild sich bewegen.
Eigendlich trivial und es klappt auch alles soweit wunderbar.
Mein Problem ist, dass ich beim erstellen des JFrames explizit seine Größe angebe (640 x 480).
Wenn ich nun das Programm starte ist das Fenster jedoch nur etwa 455 Pixel hoch, was mich bald zur Verzweiflung bringt, da ich es auch nach eingehender Recherche nicht in den Griff bekomm.
Vll hat ja jemand schon Erfahrungen damit gesammelt und weiss einen Rat?
Vielen Dank schonmal im Vorraus
EDIT: Ich hab noch etwas rumprobiert und habe folgende Vermutung:
Kann es sein, dass ich bei der Angabe des der Größe des JFrames die höhe des Statusbalkens sowie die Breite des Ramens des Fensters mit einberechnen muss?
Mhhh, meine Vermutung scheint sich zu bestätigen. Addiere ich 32 auf die Höhe und 6 auf die Breite (JFrame) ist der angezeigte Bereich korrekt (WinXP).
Da der Ramen tatsächlich 3 Pixel Breite zu haben scheint wäre das zumindest ein einleuchtender Erklärungsversuch.
Die Frage die sich dann jedoch unweigerlich stellt ist: Wenn dies alles tatsächlich der Fall sein sollte, bleibt das dann auch Plattformunabhängig?
Ich kann mir gut vorstellen, dass unter anderen Windowmanagern die Abmessungen des Fenster"overheads" (entschuldigt dieses konstruierte Wort
) andere Dimensionen hat.
Mein Ziel ist es ja, den Anzeigebereich (JPanel) plattformunabhängig immer auf genau 640x480 Pixel zu setzen ohne Schmiereffekte wir weisse Balken etc zu bekommen.
Nun ja, soviel zu meine Vermutungen, würd mich freun, wenn mich jemand korrigiert oder auch gern bestätigt![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Weitere Zeit zieht ins Land und ich hab die "Antwort" auf meine Frage gefunden:
Die Größe des JFrames beinhaltet tatsächlich die Größe des "Drumherums".
Aber eine beantwortete Frage wirft zwangsläufig 3 weitere auf![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Mein Ziel ist es nun, die Größe des JFrames so zu wählen, dass die Innengröße genau den gewünschten 640x480 entspricht.
habe da bisher einiges über frame.pack() und setPreferedSize gelesen, leider noch nichts, was mir wirklich weiterhilft. Aber ich bleib am Ball![Wink ;) ;)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f609.png)
Eine Frage möcht ich aber dennoch gern in den Raum werfen:
Das ist mein Ansatz bisher (ohne lästigen Code der auch wirklich was macht
)
Ist meine ursprüngliche Premisse (Größe des JFrames anhand der gewünschten Größe des JPanels plattformunabhängig zu wählen) kompatibel mit diesem Ansatz, oder muss ich ganz oder etwas andere Wege gehen?
Bin neu hier und würd euch gern sofort mit einem Problem bombadieren
![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Im Prinzip ist es ein JFrame mit einem JPanel und auf das ich zunächst ein Hintergrundbild male via Graphics2D Objekt und darüber lasse ich ein weiteres bild sich bewegen.
Eigendlich trivial und es klappt auch alles soweit wunderbar.
Mein Problem ist, dass ich beim erstellen des JFrames explizit seine Größe angebe (640 x 480).
Wenn ich nun das Programm starte ist das Fenster jedoch nur etwa 455 Pixel hoch, was mich bald zur Verzweiflung bringt, da ich es auch nach eingehender Recherche nicht in den Griff bekomm.
Vll hat ja jemand schon Erfahrungen damit gesammelt und weiss einen Rat?
Vielen Dank schonmal im Vorraus
EDIT: Ich hab noch etwas rumprobiert und habe folgende Vermutung:
Kann es sein, dass ich bei der Angabe des der Größe des JFrames die höhe des Statusbalkens sowie die Breite des Ramens des Fensters mit einberechnen muss?
Mhhh, meine Vermutung scheint sich zu bestätigen. Addiere ich 32 auf die Höhe und 6 auf die Breite (JFrame) ist der angezeigte Bereich korrekt (WinXP).
Da der Ramen tatsächlich 3 Pixel Breite zu haben scheint wäre das zumindest ein einleuchtender Erklärungsversuch.
Die Frage die sich dann jedoch unweigerlich stellt ist: Wenn dies alles tatsächlich der Fall sein sollte, bleibt das dann auch Plattformunabhängig?
Ich kann mir gut vorstellen, dass unter anderen Windowmanagern die Abmessungen des Fenster"overheads" (entschuldigt dieses konstruierte Wort
![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Mein Ziel ist es ja, den Anzeigebereich (JPanel) plattformunabhängig immer auf genau 640x480 Pixel zu setzen ohne Schmiereffekte wir weisse Balken etc zu bekommen.
Nun ja, soviel zu meine Vermutungen, würd mich freun, wenn mich jemand korrigiert oder auch gern bestätigt
![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Weitere Zeit zieht ins Land und ich hab die "Antwort" auf meine Frage gefunden:
Die Größe des JFrames beinhaltet tatsächlich die Größe des "Drumherums".
Aber eine beantwortete Frage wirft zwangsläufig 3 weitere auf
![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Mein Ziel ist es nun, die Größe des JFrames so zu wählen, dass die Innengröße genau den gewünschten 640x480 entspricht.
habe da bisher einiges über frame.pack() und setPreferedSize gelesen, leider noch nichts, was mir wirklich weiterhilft. Aber ich bleib am Ball
![Wink ;) ;)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f609.png)
Eine Frage möcht ich aber dennoch gern in den Raum werfen:
Java:
public class GrafTTT extends JFrame implements Konstanten{
public GrafTTT() {
add(new Board());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WINWIDTH, WINHEIGHT);
setLocationRelativeTo(null);
setTitle("GrafixTTT");
setVisible(true);
}
public static void main(String[] args) throws IOException {
new GrafTTT();
}
}
class Board extends JPanel implements ActionListener, Konstanten {
public Board() {
[...]
setDoubleBuffered(true);
timer = new Timer(TIMER, this);
timer.start();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
[...]
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void actionPerformed(ActionEvent e)
{
[...]
repaint();
}
}
Das ist mein Ansatz bisher (ohne lästigen Code der auch wirklich was macht
![Smile :) :)](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f642.png)
Ist meine ursprüngliche Premisse (Größe des JFrames anhand der gewünschten Größe des JPanels plattformunabhängig zu wählen) kompatibel mit diesem Ansatz, oder muss ich ganz oder etwas andere Wege gehen?
Zuletzt bearbeitet von einem Moderator: