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

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

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

4

1 回答 1

2

您应该覆盖并在JPanel.paintComponent(). AWT 和 Swing 中的结帐绘画。

不确定使用的原因是什么setbounds(),您是否尝试使用组件的绝对定位?我建议熟悉 java 布局,这是一个好的开始 -布局管理器的视觉指南

于 2012-04-18T19:32:19.927 回答