2012-10-09 59 views
3

所以我有一個程序,在一組JButton和一個JTextArea旁邊使用paintComponent(圓弧和橢圓,準確地)顯示一個圖像,並且我希望圓弧/橢圓改變大小時/如果用戶更改框架的大小。我已經實現了getWidth,getHeight的東西,但我似乎無法得到它的工作。在Paintcomponent中調整大小

這是我的代碼。如果我不setPreferredSize,那麼它不工作;圓弧/橢圓在框架邊緣和按鈕之間被擠壓。如果我嘗試使用getWidth()和getHeight()而不是200的大小,它也不工作;弧/橢圓根本不顯示。不知道該怎麼辦。

此外,任何提示讓我的代碼更加複雜(例如,如果只需要一個類),將不勝感激。

public class GUIDesign 
{ 
public static void main(String[] args) 
{ 
    GUIFrame frame = new GUIFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
} 
class GUIFrame extends JFrame 
{ 
PaintPanel2 canvas = new PaintPanel2(); 
public GUIFrame() 
{ 
    ... 

    add(mainHolder, BorderLayout.CENTER); //has the JButtons, JTextArea. 
    add(canvas, BorderLayout.WEST); 
    this.setTitle("this"); 
    this.pack(); 
    this.setLocationRelativeTo(null); 
} 
} 
class PaintPanel2 extends JPanel 
{ 
private static int SIZE = 200; 

public PaintPanel2() 
{ 
    setPreferredSize(new Dimension(SIZE, SIZE)); 
} 
protected void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 

    int xCenter = getWidth()/2; 
    int yCenter = getHeight()/2; 

    int startOvalX = (int) (xCenter/5); 
    int startOvalY = (int) (yCenter/5); 
    int endOvalX = (int) (xCenter * 1.5); 
    int endOvalY = (int) (yCenter * 1.5); 
    g.setColor(Color.green); 
    g.fillArc(startOvalX, startOvalY, endOvalX, endOvalY, 0, 180); 
    g.setColor(Color.black); 
    g.drawArc(startOvalX, startOvalY, endOvalX, endOvalY, 0, 180); 
    g.setColor(Color.black); 
    g.fillOval((int)(startOvalX/1.5) - 1, (int) (startOvalY * 2.5),(int) (endOvalX * 1.1) + 2,(int)(endOvalY/1.5)); 
    g.setColor(Color.green); 
    g.fillOval((int)(startOvalX/1.5), (int) (startOvalY * 2.5) -1,(int) (endOvalX * 1.1),(int)(endOvalY/1.5)); 
} 
} 

回答

2

當您使用BorderLayout作爲佈局管理器,即在CENTER所添加的當主容器調整來調整一個組件。因此,如果您更改代碼以使畫布位於中心,您將獲得預期結果:

add(mainHolder, BorderLayout.WEST); //has the JButtons, JTextArea. 
add(canvas, BorderLayout.CENTER); 
+0

謝謝!現在我知道了,知道是戰鬥的一半。 – 00101100

+0

當然。別客氣。 –

相關問題