【问题标题】:Referencing coordinates of a JPanel in a JFrame在 JFrame 中引用 JPanel 的坐标
【发布时间】:2012-04-30 06:53:53
【问题描述】:

您好,我无法在我的 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);                                     

那么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 相关,但是当我paint() 时,它似乎获得了与 contentPane 相关的坐标,但参考 JFrame 绘制了这些坐标。我意识到我可以添加一个值来下移这条线,但我怀疑这是一个糟糕的解决方案。

我是否需要添加一个带有它自己的 paint() 方法的 contentPane 或类似的东西?

【问题讨论】:

    标签: java swing jframe jpanel contentpane


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,这是有道理的......是的,这就是我使用 set bounds 的原因......我在布局方面遇到了麻烦,还不想陷入困境,因为它是一所学校项目,但我计划在我让它运行后弄清楚它们
    • “我计划在我让它发挥作用后弄清楚它们” 除非你这样做,否则你的 GUI 将无法正常工作。
    • @AndrewThompson 昨晚我发现了这个问题 :) 看起来我会比我计划的更快地学习布局管理器
    猜你喜欢
    • 2011-09-22
    • 2011-12-08
    • 2016-08-21
    • 1970-01-01
    • 2011-11-30
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多