5

我有一个问题,当我尝试将鼠标侦听器添加到 JTextPane 中的 JLabel 或 JButton 时,我收到错误“无法通过调用转换转换为 Mouselistener”。我更希望将组件放在 JEditorPane 中。我还听说可以使用 HyperlinkEvent。

基本上我想要一个可以在 JEditorPane(preffered)/JTextPane 中右击/左击的组件。任何帮助,将不胜感激

现在它工作(排序)它只接收右键单击,我不需要绘制按钮边缘。我可以在按钮的文本下划线吗?

示例代码如下...

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

内联B.java

import javax.swing.JButton;

    public class InlineB extends JButton    {

        public InlineB( String caption )    {

            super( caption );
        }
    }
4

2 回答 2

5

我不确定你想要什么问题无处不在。

但是看起来太下划线了一个JButton简单的用HTML设置按钮的文本标签:

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

至于左键单击,在您的 if 语句中添加一个检查MouseEvent.BUTTON1or SwingUtilities.isLeftMouseButton(MouseEvent me)

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

不要在类或实例上绘制JButton简单调用的边界(我在类中做了):setBorder(null);InlineBInlineB

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

我还看到您没有设置的内容类型JTextPane,您应该:

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

我做了一个小例子,虽然我没有使用 Applet,但它很容易移植:

在此处输入图像描述

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
    }
}
于 2012-09-29T12:22:57.333 回答
2

我有一个问题,当我尝试将鼠标侦听器添加到 JTextPane 中的 JLabel 或 JButton 时,出现错误“无法通过调用转换转换为 Mouselistener”。

您传递给 addMouseListener() 的对象实现了 MouseListener 接口。正确的?(刚刚看到代码示例。鼠标适配器似乎是正确的)。
你现在说Now it works (sortof)。这是否意味着您已纠正该错误?

顺便说一句,如果解决了问题并且您有后续问题,并且社区可以重复使用它们,那么我建议打开一个单独的问题:https ://meta.stackexchange.com/questions/48345/what-is-the-etiquette -为了改变问题的实质

我更希望将组件放在 JEditorPane 中。

我猜你的意思是你正在听的组件。无论如何,我不确定JEditorPane是否打算用作其他组件的容器。

我还听说可以使用 HyperlinkEvent。

HyperLinkEvent用于 ENTERED、EXITED 和 ACTIVATED 事件类型。您打算处理超链接事件或鼠标事件

基本上我想要一个可以在 JEditorPane(preffered)/JTextPane 中右击/左击的组件。任何帮助,将不胜感激

我建议下次先给出问题的范围/背景。我猜你的意思是你想要一些东西(你能更具体吗?)在一个可以点击的文本窗格之上。无论如何,我很惊讶您打算以这种方式使用 JEditorPane。

于 2012-09-29T09:32:28.393 回答