java 控件 自动换行_JButton中的自动换行

这篇博客介绍了如何创建一个名为MultiLineButton的类,该类继承自JTextArea并实现了MouseListener接口,以达到在Java中让按钮支持文本自动换行的效果。通过设置JTextArea的lineWrap和wrapStyleWord属性为true,以及添加鼠标监听事件来模拟按钮的点击行为。虽然这个方法不支持通过ButtonModels进行修改,但对于大部分需求而言已经足够使用。
摘要由CSDN通过智能技术生成

最简单的方法是修改另一个支持自动换行的Component,以使其充当Button。我做了一个简单的类,它操纵JTextArea充当Button。

public class MultiLineButton extends JTextArea implements MouseListener    {

/**

*

*/

private static final long serialVersionUID = 1L;

private Color defaultColor;

private Color highlight, lightHighlight;

private BtnState state;

private List actionListeners;

public MultiLineButton(String text, Color defaultColor) {

this.setEditable(false);

this.setText(text);

this.setLineWrap(true);

this.setWrapStyleWord(true);

this.addMouseListener(this);

this.setBorder(new EmptyBorder(5, 10, 5, 10));

state = BtnState.NORMAL;

this.defaultColor = defaultColor;

this.setBackground(defaultColor);

highlight = new Color(122, 138, 153);

lightHighlight = new Color(184, 207, 229);

// clickedColor = new Color(r, g, b);/

actionListeners = new ArrayList<>();

}

@Override

public Color getSelectionColor() {

return getBackground();

}

@Override

public void mouseClicked(MouseEvent e) {

}

@Override

public void mousePressed(MouseEvent e) {

setBackground(lightHighlight);

state = BtnState.CLICKED;

repaint();

}

@Override

public void mouseReleased(MouseEvent e) {

for (ActionListener l : actionListeners) {

l.actionPerformed(new ActionEvent(this,     ActionEvent.ACTION_PERFORMED, this.getText()));

}

setBackground(defaultColor);

state = BtnState.NORMAL;

repaint();

}

@Override

public void mouseEntered(MouseEvent e) {

state = BtnState.HOVERED;

repaint();

}

@Override

public void mouseExited(MouseEvent e) {

setBackground(defaultColor);

state = BtnState.NORMAL;

repaint();

}

@Override

public void paintBorder(Graphics g) {

super.paintBorder(g);

Graphics g2 = g.create();

g2.setColor(highlight);

switch (state) {

case NORMAL:

g2.drawRect(0, 0, getWidth() - 1, getHeight() - 1);

break;

case HOVERED:

g2.drawRect(1, 1, getWidth() - 3, getHeight() - 3);

g2.setColor(lightHighlight);

g2.drawRect(0, 0, getWidth() - 1, getHeight() - 1);

g2.drawRect(2, 2, getWidth() - 5, getHeight() - 5);

break;

case CLICKED:

Border b = new BevelBorder(BevelBorder.LOWERED);

b.paintBorder(this, g2, 0, 0, getWidth(), getHeight());

break;

}

g2.dispose();

}

public void addActionListener(ActionListener l) {

actionListeners.add(l);

}

public List getActionListeners() {

return actionListeners;

}

}

BtnState只是一个具有常量NORMAL,HOVERED,CLICKED的枚举

大多数代码仅用于使JTextArea看起来像JButton,并且效果很好。缺点之一是您无法通过ButtonModels修改它,但是对于大多数应用程序来说,这就足够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值