引用JFrame中JPanel的坐标

时间:2012-04-18 19:28:49

标签: java swing jframe jpanel contentpane

您好我在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()));   
}

paint方法中的最后一个命令与我的问题无关...... 代码似乎是将原点作为(10,10),但是将它作为一个整体而不是contentPane应用于JFrame。我不完全理解contentPane,但我认为add()添加到内容窗格,从那时起你只引用contentPane中的坐标...我只是不明白为什么setBounds()添加了JPanel我在哪里想要它只是(10,10)只与contentPane相关,但是当我绘制()时,它似乎得到与contentPane相关的坐标,但是在引用JFrame时绘制这些坐标。我意识到我可以添加一个值来移动线,但我怀疑这是一个糟糕的解决方案。

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

1 个答案:

答案 0 :(得分:2)

你应该覆盖并在JPanel.paintComponent()中进行绘画。结帐Painting in AWT and Swing

不确定使用setbounds()的原因是什么,您是否尝试使用absolute positioning组件?我建议熟悉java布局,这是一个好的开始 - A Visual Guide to Layout Managers