Java 添加JTextPane后按钮何时不工作?
我创建了一个按钮,里面有JTextPane。 当我将JTextPane添加到JButton时,我无法单击该按钮。 当我删除JTextPane时,我可以单击按钮。 有人知道如何解决这个问题吗Java 添加JTextPane后按钮何时不工作?,java,swing,jbutton,jtextpane,Java,Swing,Jbutton,Jtextpane,我创建了一个按钮,里面有JTextPane。 当我将JTextPane添加到JButton时,我无法单击该按钮。 当我删除JTextPane时,我可以单击按钮。 有人知道如何解决这个问题吗 public class BtnOrderFefcoStyle extends JButton { private final static String NAME_FONT = "ARIAL"; private final static bool
public class BtnOrderFefcoStyle extends JButton {
private final static String NAME_FONT = "ARIAL";
private final static boolean IS_BOLD = true;
private final static int SIZE_FONT = 18;
private final static Color NAVY_COLOR = new Color(0 , 51 , 102)
private final static int BUTTON_WIDTH = 122;
private final static int BUTTON_HEIGHT = 64;
private final static int BORDER_THICKNESS = 2;
private int posX , posY;
public BtnOrderFefcoStyle(int pos_x , int pos_y)
{
super() ;
this.posX = pos_x;
this.posY= pos_y;
setOpaque(false);
setBorderPainted(false);
setContentAreaFilled(false);
setFocusable(false);
setEnabled(true);
setBorder(null);
setBounds(pos_x, pos_y, BUTTON_WIDTH, BUTTON_HEIGHT);
setForeground(Color.WHITE);
JTextPane nameBtn = new JTextPane();
nameBtn.setEditable(false);
nameBtn.setText("ADD TO LIST");
nameBtn.setAutoscrolls(true);
nameBtn.setEnabled(false);
nameBtn.setOpaque(false);
SimpleAttributeSet attribs = new SimpleAttributeSet();
StyleConstants.setAlignment(attribs, StyleConstants.ALIGN_CENTER);
StyleConstants.setFontFamily(attribs, NAME_FONT);
StyleConstants.setBold(attribs, IS_BOLD);
StyleConstants.setFontSize(attribs, SIZE_FONT);
nameBtn.setParagraphAttributes(attribs, true);
nameBtn.setCaretPosition(1);
nameBtn.setParagraphAttributes(attribs, true);
nameBtn.setDisabledTextColor(NAVY_COLOR);
//nameBtn.setBackground(new Color(153 , 153, 153));
nameBtn.setSize(BUTTON_WIDTH - 2 * BORDER_THICKNESS , BUTTON_HEIGHT - 2 * BORDER_THICKNESS);
//nameBtn.setForeground(NAVY_COLOR);
add(nameBtn);
}
@Override
protected void paintComponent(Graphics g)
{
// TODO Auto-generated method stub
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0 , 0 , BUTTON_WIDTH, BUTTON_HEIGHT);
g.setColor(Color.GRAY);
g.fillRect(BORDER_THICKNESS , BORDER_THICKNESS , BUTTON_WIDTH - 2 * BORDER_THICKNESS , BUTTON_HEIGHT - 2 * BORDER_THICKNESS );
}
}
将
MouseEvent
传递给单击的组件。如果将JTextPane
添加到JButton
,则单击的是文本窗格,而不是按钮
您可以尝试从JTextPanel中删除鼠标侦听器
for (MouseListener ml: textPane.getListeners(MouseListener.class))
textPane.removeMouseListener( ml );
不确定是否还需要删除MouseMotionListener。当前示例中发生的情况是: 您的
JTextPane
被放置在JButton
的顶部,当您从JButton
中删除边框时,它占用了所有可用空间,因此您一直在点击JTextPane
如果我们在JTextPane
中添加边框,这就是在删除JButton
边框之前和之后得到的结果
要解决此问题,您可以:
- 在
中添加一个JTextPane
,例如:MouseListener
nameBtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); System.out.println("Clicked on nameBtn"); } });
- 创建一个使用HTML的方法,如上面的注释所示:
private String getButtonString(String stringFromFile) { StringBuilder sb = new StringBuilder(); sb.append("<html><body><p>"); sb.append(stringFromFile); sb.append("</p></body></html>"); return sb.toString(); }
私有字符串getButtonString(字符串stringFromFile){ StringBuilder sb=新的StringBuilder(); sb.追加(“”); 某人追加(stringFromFile); sb.追加(“”); 使某人返回字符串(); }
您的代码在哪里?您是否可以展示您的代码并解释为什么要将JTextPane添加到JButton?您可以在没有JTextPane的情况下在JButton上显示文本。我希望将文本包装在按钮上,这就是我使用JTextPane的原因。否则,当我用JButton的构造函数将文本框起来时,我看不到文本,因为我使用了paintComponent propablyBut,但如果这是您唯一的愿望,让文本换行,那么为什么要让它这么复杂呢?这可以通过JButton的内置函数轻松完成。检查。您还可以使用默认的JButton行为更改显示文本的字体。我知道我可以使用ex.HTML lang。但是我想插入没有任何特殊符号的原始文本。将来我将从一个文件中导入文本。