【问题标题】:Swing ComponentListener.componentShown is not firedSwing ComponentListener.componentShown 没有被触发
【发布时间】:2011-07-25 23:05:28
【问题描述】:

我想在显示 WorldPanel 时获取(图形 g)。感谢stackoverflow,我看到了应该在哪里使用getGraphics方法(ComponentListener.componentShown)的答案,但不知何故我的听众无法捕捉到componentShown。

我做错了什么?代码底部sn -p 不能不显示"hello"。

public class MainPanel extends javax.swing.JPanel implements ComponentListener {
    private CWorldPanel WorldPanel; // extends JPanel

    private void initGUI() {
        try {
            ...
            this.setLayout(thisLayout);
            {
                WorldPanel = new CWorldPanel();             
                WorldPanel.addComponentListener(this);
...
    @Override
    public void componentShown(ComponentEvent e) {
        System.out.println("hello");

    }

在页面底部查看我的解释和感谢 (cscsaba)

【问题讨论】:

  • 为什么要抓取 Graphics 对象?无论如何,你不能用它做任何事情......
  • 您好,感谢您的努力和解答。

标签: java swing components


【解决方案1】:

如果您想获取 Graphics 对象以便在组件可见时立即对其进行绘制,请不要这样做。只需覆盖要显示的对象的paintComponent 方法,然后在其中绘制。

(我不知道为什么您的 ComponentListener 不起作用,由于您的示例不完整,因此无法尝试。)

【讨论】:

  • 据我了解 ComponentListener api,显示/隐藏的通知反映了组件的可见性属性,这在实例化时是正确的(不要问我为什么 ;-) - 所以启动时没有通知。如果您对此感兴趣,请使用 HierarchyListener(或者它是 Ancestor?忘记了)。
  • 您好,感谢您的努力和解答。我想获取 Graphics 对象,因为它需要我的抽象坐标系,例如 MyAbstractCoordSys 使用 MyAWTCircle(x,y,diameter,Grhaphics g) 并且我必须在 JPanel Graphics 已经退出时捕获它。这就是为什么监听器,这就是为什么paintComponent 不是创建形状的好地方。
  • 我试图尽快回答,但 5 分钟。限制也不允许我稍后发布。 :(
  • paintComponent 是您拥有的唯一位置 ;-) 如果该事实不符合您的设计,请更改设计。
  • kleopatra: 越来越清楚了,没有任何选择可以让我的生活更轻松,我怀疑你是对的 :)
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 2012-06-03
  • 2019-11-07
  • 2018-09-01
  • 2018-12-03
  • 2021-04-23
  • 2019-01-30
  • 2020-08-15
相关资源
最近更新 更多