簡體   English   中英

通過標簽單擊在JFrame上顯示JPanel

[英]Displaying a JPanel on JFrame by a label click

我一遍又一遍地嘗試它,它不起作用。當我點擊標簽時,什么也沒有發生。

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

看起來一個愚蠢的問題,但是,您確定您的方法正在被調用嗎? 您的對象是否注冊為該標簽的事件偵聽器?

可以肯定的是,您應該實現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示例

如果偵聽器實現正確,則應更改此設置

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

有了這個

o.setSize(122,200);

您也可以放置setVisible方法,但也可以在沒有它的情況下使用

我認為您正在使用Netbeans,如果是,則顯示的方法是自動生成的,這意味着它已在其自動生成的代碼段中正確實現了偵聽器,現在,這意味着您在顯示JPanel時出現了錯誤,而不是在實現偵聽器中,所以我為您找到了一些建議,

  1. 您已經編寫了Broder Layout,但是編寫了Border Layout,但這在發布Question時似乎是一個錯字。
  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();        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM