0

我一遍又一遍地尝试它。它不起作用。当我单击标签时,没有任何反应。

 private void jLabel1MouseClicked(java.awt.event.MouseEvent evt)                 

  {                                     
        setLayout(new BorderLayout());
        JPanel o = new JPanel ();
        o.setPreferredSize(new Dimension(122,200));
        o.setBackground(Color.red);
    add(o,BroderLayout.CENTER);

        // TODO add your handling code here:
    } 
4

3 回答 3

1

看起来是一个愚蠢的问题,但是,你确定你的方法被调用了吗?您的对象是否注册为此标签的事件侦听器?

可以肯定的是,您应该实现 MouseListener 接口:

public class YourClass () implements MouseListener{
    public YourClass(){
        ...
        label.addListener(this);
    }
    // and then implement the method to handle the event
    public void mouseClicked(MouseEvent e) {
        // TODO: Handle the event
    }
}

jLabel1MouseClicked 看起来不像事件处理方法

编辑:顺便说一句,您可能希望在此接口中实现其他方法,即使您不需要它们。检查文档:MouseListener 示例

于 2013-08-05T08:59:20.810 回答
0

如果监听器被正确实现,那么你应该改变这个

o.setPreferredSize(new Dimension(122,200));

有了这个

o.setSize(122,200);

你也可以放一个setVisible方法,但没有它也可以工作

于 2013-08-05T11:36:11.200 回答
0

我认为您正在使用 Netbeans,如果是,那么您显示的方法是自动生成的,这意味着它已在其自动生成的代码段中正确实现了侦听器,现在这意味着您在 Showing JPanel not in implementation listener 中有错误,所以我为你找到了一些建议,

  1. 您已经编写Broder了 Layout 但它的BorderLayout 但是在发布问题时这似乎是一个错字。
  2. 其次,您没有更新框架,仅添加 JPanel 不足以显示它,因此添加此代码,this.revalidate();

所以最后你的块代码应该是这样的,

private void jLabel1MouseClicked(java.awt.event.MouseEvent evt)                 

{                                     
    setLayout(new BorderLayout());
    JPanel o = new JPanel ();
    o.setPreferredSize(new Dimension(122,200));
    o.setBackground(Color.red);
    add(o,BorderLayout.CENTER);
    revalidate();        
}
于 2013-08-12T18:37:24.110 回答