2

こんにちは、JFrame 内で JPanel のオリジンを参照するのに問題があります。私のJPanelは、コンストラクターでJPanelの左端にある行を追加したいように設定されました。

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

あとは塗装方法…

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()));   
}

ペイント メソッドの最後のコマンドは、私の問題とは無関係です...コードは原点を (10, 10) として取得しているように見えますが、それを contentPane ではなく JFrame 全体に適用しています。私は contentPane を完全には理解していませんが、add() がコンテンツ ペインに追加され、それ以降は contentPane からのみ座標を参照していると思いました... setBounds() が JPanel を追加した理由がわかりません。 contentPane のみに関連して (10,10) が必要でしたが、paint() すると、contentPane に関連する座標を取得するように見えますが、JFrame を参照してそれらの座標をペイントします。値を追加して行を下に移動できることはわかっていますが、それは不十分な解決策であると思われます。

独自の paint() メソッドまたはそれらの線に沿った何かで contentPane を追加する必要がありますか?

4

1 に答える 1

2

でペイントをオーバーライドして行う必要がありますJPanel.paintComponent()AWT と Swing でペイントをチェックアウトします。

を使用する理由がわかりません。コンポーネントを絶対配置setbounds()しようとしていますか? Java レイアウトに慣れることをお勧めします。ここから始めるのが良いでしょう - A Visual Guide to Layout Managers

于 2012-04-18T19:32:19.927 に答える