2012-09-29 110 views
5

我有一個問題,當我嘗試添加一個mouselistener到JTextPane中的JLabel或JButton時,我得到錯誤「不能通過調用轉換轉換成Mouselistener」。我寧願在JEditorPane中使用該組件。我也聽說可以使用HyperlinkEvent。添加mouselistener到JTextPane插入的JLabel/JButton

Basicly我希望能是正確的組件左點擊/在一個JEditorPane(參訪)/的JTextPane。任何幫助,將不勝感激

現在,它的工作原理(sortof)只收到
正確點擊,我需要不畫按鈕的邊緣。我可以強調按鈕的文字嗎?

示例代碼如下...

import java.awt.*; 
import javax.swing.*; 
import java.awt.Color; 
import javax.swing.JTextPane; 
import javax.swing.JButton; 
import java.applet.*; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

public class jlabeltest extends Applet { 

    public void init() { 

     jlabeltest editorPaneExample = new jlabeltest(); 
     editorPaneExample.setSize(550, 300); 
//  editorPaneExample.setText("tutorialData.com"); 
     editorPaneExample.setVisible(true); 
    } 


    public jlabeltest() { 

     JTextPane editorPane = new JTextPane(); 
     editorPane.setSelectedTextColor(Color.red); 
     editorPane.setText("<p color='#FF0000'>Cool!</p>"); 
     InlineB label = new InlineB("JLabel"); 
     label.setAlignmentY(0.85f); 

     label.addMouseListener(new MouseAdapter() { 

     public void mouseReleased(MouseEvent e) 
     { 
     if (e.isPopupTrigger()) 
     { 
      JOptionPane.showMessageDialog(null,"Hello!"); 
      // do your work here 
     } 
    } 
}); 
     editorPane.insertComponent(label); 
     this.add(editorPane); 
    } 
} 

InlineB.java

import javax.swing.JButton; 

    public class InlineB extends JButton { 

     public InlineB(String caption) { 

      super(caption); 
     } 
    } 
+3

有一些示例代碼? – MadProgrammer

回答

2

我在那裏當我嘗試和的MouseListener在JTextPane中我添加到JLabel JButton的或有問題獲取錯誤「無法通過調用轉換轉換爲Mouselistener」。

傳遞給addMouseListener()的對象實現MouseListener接口。對? (剛剛看過代碼示例,鼠標適配器看起來不錯)。
你現在說現在它工作(sortof)。這是否意味着你糾正了這個錯誤?

BTW如果得到解決,你有後續的問題,它們是可重複使用的由社區,那麼我會建議打開一個單獨的問題:https://meta.stackexchange.com/questions/48345/what-is-the-etiquette-for-changing-the-substance-of-a-question

我寧願有分量的一個JEditorPane 。

我猜你的意思是你在聽的組件。無論如何,我不確定JEditorPane是否被用作其他組件的容器。

我還聽到一個HyperlinkEvent都可以使用。

HyperLinkEvent用於輸入,EXITED和ACTIVATED事件類型。您打算處理超鏈接事件或mouse events

基本上我想要一個組件可以在JEditorPane(preffered)/ JTextPane中右鍵/左鍵單擊。任何幫助,將不勝感激

我會建議下次給問題的範圍/上下文第一。我想你的意思是你想要一些東西(你能更具體些嗎?)在可以點擊的文本窗格的頂部。無論如何,我很驚訝你打算這樣使用JEditorPane。

+0

有沒有什麼辦法可以在TextPane中使用HTML? – Confident

+1

@Confident我還沒有嘗試過。但似乎是在Swing教程中完成的:[「如何使用編輯器窗格和文本窗格」](http://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html) – Javier

5

我不確定你想要什麼問題無處不在。一個JButton

但看太多下劃線的文字簡單地設置按鈕上的文字與HTML 標籤:

//added <u></u> to underlone button 
InlineB label = new InlineB("<html><u>JLabel</u></html>"); 

爲左側點擊添加一個檢查爲MouseEvent.BUTTON1SwingUtilities.isLeftMouseButton(MouseEvent me)您的if語句:

//added check for MouseEvent.BUTTON1 which is left click 
if (e.isPopupTrigger() || e.getButton() == MouseEvent.BUTTON1) { 
} 

爲了不繪製JButton邊境只需撥打setBorder(null);無論是在InlineBç姑娘或在InlineB實例(我做了它的類內):

  public InlineB(String caption) { 
    super(caption); 
    setBorder(null);//set border to nothing 
} 

我也看到你不設置JTextPane的內容類型,你應該:

//set content as html 
    editorPane.setContentType("text/html"); 

我做了小例子,雖然我沒有用一個Applet,但它很容易移植:

enter image description here

import java.awt.Color; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Test().createAndShowUI(); 
      } 
     }); 
    } 

    private void createAndShowUI() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     initComponents(frame); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    private void initComponents(JFrame frame) { 
     JTextPane editorPane = new JTextPane(); 
     editorPane.setSelectedTextColor(Color.red); 

     //set content as html 
     editorPane.setContentType("text/html"); 
     editorPane.setText("<p color='#FF0000'>Cool!</p>"); 

     //added <u></u> to underlone button 
     InlineB label = new InlineB("<html><u>JLabel</u></html>"); 

     label.setAlignmentY(0.85f); 

     label.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       //added check for MouseEvent.BUTTON1 which is left click 
       if (e.isPopupTrigger() || e.getButton() == MouseEvent.BUTTON1) { 
        JOptionPane.showMessageDialog(null, "Hello!"); 
        // do your work here 
       } 
      } 
     }); 

     editorPane.insertComponent(label); 
     frame.getContentPane().add(editorPane); 
    } 
} 

class InlineB extends JButton { 

    public InlineB(String caption) { 
     super(caption); 
     setBorder(null);//set border to nothing 
    } 
}