2015-11-19 123 views
0

我想創建一個標題欄。標題需要點擊。有沒有辦法做到這一點?因爲當我在面板上放置一個mouslistener時,您可以點擊面板上的任何地方,事件就會發生。它必須只有當我點擊的TitledBorder標題欄的標題需要點擊

回答

0

這裏的標題被觸發是,當你將鼠標懸停在的TitledBorder的標題顯示工具提示的例子:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class TitledBorderTest 
{ 
    private static void createAndShowUI() 
    { 
     UIManager.getDefaults().put("TitledBorder.titleColor", Color.RED); 
     Border lowerEtched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); 
     String titleText = "Long title that will be truncated in the panel"; 
     TitledBorder title = BorderFactory.createTitledBorder(lowerEtched, titleText); 

     JPanel panel = new JPanel() 
     { 
      @Override 
      public String getToolTipText(MouseEvent e) 
      { 
       Border border = getBorder(); 

       if (border instanceof TitledBorder) 
       { 
        TitledBorder tb = (TitledBorder)border; 
        FontMetrics fm = getFontMetrics(getFont()); 
        int titleWidth = fm.stringWidth(tb.getTitle()) + 20; 
        Rectangle bounds = new Rectangle(0, 0, titleWidth, fm.getHeight()); 
        return bounds.contains(e.getPoint()) ? super.getToolTipText() : null; 
       } 

       return super.getToolTipText(e); 
      } 
     }; 
     panel.setBorder(title); 
     panel.setToolTipText(title.getTitle()); 

     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(panel); 
     frame.setSize(200, 200); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

的概念應該是,當類似在面板上使用MouseListener。

+0

不,我不知道如何創建我的情況,因爲我無法在邊框上放置mouseaddapter –

+0

@KoenVanLooveren - 我沒有建議將MouseAdapter添加到邊框。閱讀我最後的評論。 getToolTipText()方法將MouseEvent作爲參數。所以你的MouseLIstener也將MouseEvent作爲參數。代替「返回工具提示文本」,您的代碼將調用您的mouseClick()邏輯。 – camickr