您好我在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?
答案 0 :(得分:2)
你应该覆盖并在JPanel.paintComponent()
中进行绘画。结帐Painting in AWT and Swing。
不确定使用setbounds()
的原因是什么,您是否尝试使用absolute positioning组件?我建议熟悉java布局,这是一个好的开始 - A Visual Guide to Layout Managers。