通过标签单击在JFrame上显示JPanel

时间:2013-08-05 08:42:47

标签: java swing jframe jpanel jlabel

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

 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:
    } 

3 个答案:

答案 0 :(得分: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看起来不像事件处理程序方法

编辑:顺便说一句,您可能希望在此界面中实现其他方法,即使您不需要它们也是如此。查看文档:{​​{3}}

答案 1 :(得分:0)

如果正确实现了Listener,那么你应该改变这个

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

用这个

o.setSize(122,200);

你也可以使用setVisible方法,但它也可以在没有它的情况下使用

答案 2 :(得分:0)

我认为您正在使用Netbeans,如果是,那么您显示的方法是自动生成的,这意味着它已在其自动生成的代码段中正确实现了Listeners,现在这意味着您在显示JPanel时出错在实现监听器时,我找到了一些建议,

  1. 您已编写Broder布局但其Border布局,但在发布问题时这似乎是一个错字。
  2. 其次,您没有更新框架,只是添加JPanel不足以显示它,所以添加此代码,this.revalidate();
  3. 所以最后你的块代码应该是这样的,

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