2012-04-18 55 views
2

嗨我在我的JFrame中引用JPanel的原點時遇到了問題。我的JPanel在構造函數中的設置如下,我想添加一條位於JPanel左邊的行。引用JFrame中JPanel的座標

table = new JPanel();      
table.setBackground(Color.green);     
table.setBounds(10,10, 600, 600); 
table.setSize(width.getValue(), height.getValue()); 
add(table);          

然後paint方法...

public void paint(Graphics g){ 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D)g; 
    g2d.drawLine(table.getX(), table.getY(), table.getX(), (table.getY() + table.getHeight())); 
    g2d.drawLine(100, 100, (int)Math.round(cueBall.getPositionX()), (int)Math.round(cueBall.getPositionY())); 
} 

在paint方法的最後一個命令是無關的我的問題...... 的代碼似乎越來越原點爲(10,10 ),但將其作爲一個整體應用於JFrame而不是contentPane。我不完全理解contentPane,但我認爲add()添加到內容窗格,從那時起,您只是從contentPane引用座標......我只是不明白爲什麼setBounds()添加了JPanel,想要它是(10,10)僅與contentPane相關,但是當我繪製()時,它似乎獲得了與contentPane相關的座標,但是在引用JFrame時繪製了這些座標。我意識到我可以添加一個值來移動這條線,但我懷疑這是一個糟糕的解決方案。

我是否需要使用它自己的paint()方法或其他方法添加contentPane?

回答

2

你應該重寫並在JPanel.paintComponent()中進行繪畫。結帳Painting in AWT and Swing

不確定使用setbounds()的原因是什麼,您是否試圖使用您的組件去absolute positioning?我建議熟悉java佈局,這裏是一個好的開始 - A Visual Guide to Layout Managers

+0

好吧,這是有道理的......是的,它爲什麼我使用了界限..我有佈局的麻煩,並不想陷入他們中,因爲它爲一個學校項目,但我打算一旦我得到它的功能,就把它們弄清楚。 – Yoshi 2012-04-18 20:12:54

+1

*「我計劃一旦我得到它的功能就計算出它們。」*除非你這樣做,否則你的GUI將無法正常工作。 – 2012-04-19 05:05:51

+1

@AndrewThompson我昨晚發現了這個困難的方式:)看起來像我會比我計劃的更早地學習佈局管理器 – Yoshi 2012-04-19 16:24:13