2011-10-15 20 views
0

我有一個JFrame,我已經設置爲一定的大小,使用setBounds。然而,這使得窗口,包括邊界,這種大小(事後認爲是完全合理的)。但我想要的是窗口的大小,比如800x600,加上的邊界。這一點很重要,因爲我從JFrame的BufferStategy中繪製了一個Graphics對象,但是當使用小於20左右的y值時,我在標題欄下繪製了圖形對象。我想象不同的操作系統(甚至是不同的操作系統設置)也可以有不同的厚度邊界。之後我認爲邊界只是在窗戶上,但似乎並非如此。如何讓JFrame達到一定的尺寸,不包括邊框?

那麼,無論邊框的粗細如何,我怎麼讓邊框內的空間達到一定的尺寸?另外,爲了讓我的生活更輕鬆,我該如何讓0點和0點成爲畫面可視內容的左上角?

順便說一句,使用setUndecorated呈現它自己的問題,所以我現在沒有嘗試。

回答

5

這是因爲重要我正在從JFrame的BufferStategy繪製一個Graphics對象,

爲什麼使用BufferStrategy?這是舊的AWT代碼。 Swing默認是雙緩衝。

在Swing中進行自定義繪畫時,應該擴展JPanel(或JComponent),然後重寫paintComponent()方法。您將此組件添加到框架的內容窗格。那麼如果你遵循kleopatra的建議,你就不會有問題。

有關更多信息和示例,請參閱Swing教程中關於Custom Painting的部分。

+0

哦,所以這是我試圖找到一個解決錯誤的問題的情況下。症狀,而不是原因。如果一切順利,我會檢查一下,並標記爲已接受。 – AlbeyAmakiir

14
  1. 設置內容窗格的首選大小。
  2. 打包框架。
  3. 工作完成。

E.G.

Fixed Size Content

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

class FixedSizeContent { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame f = new JFrame("Fixed size content"); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       Container c = f.getContentPane(); 
       c.setBackground(Color.YELLOW); 
       // adjust to need. 
       Dimension d = new Dimension(400,40); 
       c.setPreferredSize(d); 
       f.pack(); 
       f.setResizable(false); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
+1

jauuuuuul ..... :-) – kleopatra

+0

對不起,這並不能解決我的問題。假設我從(0,0)到(100,100)畫一條線。該行從窗口左上角開始。不是圖片中的黃色區域,而是窗口本身。該行不出現在標題欄的位置。這意味着我在y = 0和y =〜25之間繪製的任何內容都被豎條所隱藏。您的解決方案不會改變這一點。它,然而,讓這個,當我去到全屏獨佔模式,沒有獲取繪製所有,這是同樣的問題,我與setUndecorated。 – AlbeyAmakiir

+2

*「比方說,我...」 *您最好的嘗試..post的[SSCCE(http://pscode.org/sscce.html)? –

6

讓繪圖組件報告的圖形作爲其PREF的大小

@Override 
public Dimension getPreferredSize() { 
     return new Dimension(myDrawing.getWidth(), myDrawing.getHeight()); 
} 

然後按照@安德魯的子彈2和3

+0

您未正式搖擺Rulles +1 – mKorbel

+0

Graphics對象不盡管如此,在設置窗口大小之前還有一個大小。所以,我回到了我開始的地方。除非我錯過了什麼? – AlbeyAmakiir

0

創建Canvas canvas = new Canvas();

add(canvas);JFrame

創建canvas.createBufferStrategy(2);

得到BufferStrategy bs = canvas.getBufferStrategy();

創建Graphics2D graphics2D = (Graphics2D) bufferStrategy.getDrawGraphics();

戰平graphics2DBufferedImage

顯示它在屏幕上bufferStrategy.show();

將控件添加到各種canvas ...

嘗試graphics2D.translate(x,y)到畫布上移動,從而對窗口測量某個位置 邊緣插圖插圖......

1

你可以利用這一點避免使用集裝箱

JFrame f=new JFrame("Your title"); 

Dimension d=new Dimension(); 

d.setSize(x,y); 

f.setSize(d); 
0

我得到了我的項目解決方案。它相當古老的線程,也許有人想要的代碼。試試這個

public gfx_CFrame(String _Title, int _Height, int _Width) 
{ 
    super(_Title); 

    Dimension Dim = new Dimension(_Width, _Height); 

    setMaximumSize(Dim); 
    setMinimumSize(Dim); 
    setPreferredSize(Dim); 
    pack(); 

    Dim.width = _Width + (getWidth() - getContentPane().getWidth()); 
    Dim.height = _Height + (getHeight() - getContentPane().getHeight()); 

    setMaximumSize(Dim); 
    setMinimumSize(Dim); 
    setPreferredSize(Dim); 
    pack(); 
    // .... 
}