【问题标题】:Java: Text on button disappearing upon a mouseEvent changing its colorJava:按钮上的文本在鼠标事件改变其颜色时消失
【发布时间】:2016-01-17 14:23:45
【问题描述】:

所以,我想做的是一个带有文字的按钮。

当用户将鼠标悬停在按钮上时,文本颜色会从基色 (bcolornorm) 变为悬停颜色设置 (bcolorhover)。点击后它会从 bcolorhover 变为 bcolorclic。

然而,发生的事情是,在悬停时,文本只是消失了(我假设颜色设置为 null)并且无论我做什么都不会重新出现。

代码如下:

窗口类:http://pastebin.com/Pcp0Ztks
按钮类:http://pastebin.com/438Jf33m

它是如何工作的:

有一个名为 bcolor 的变量会根据 mouseEvents 进行更改。

在初始化时,它取 bcolornorm 的值,然后根据 mouseEvents 取 bcolornorm、bcolorhover 或 bcolorclic 的值。

然后使用 g2d.setColor(bcolor) 设置颜色。

我尝试删除变量中的“this”,但它不起作用。老实说,我想不出为什么 bcolor 设置为 null 并且不取其他变量的值。

有人有解决办法吗?谢谢:)

【问题讨论】:

  • 嗯...按钮类代码似乎表明,三个bcolor... 确实从未初始化。
  • 哪些? Eclipse 没有任何指示。
  • 应该,真的。检查构造函数,你没有以任何方式使用它的参数。

标签: java button text colors


【解决方案1】:

使用paintComponent 来绘制按钮的颜色不是一个好习惯。这是一项昂贵的操作。

我建议使用 button.setBackgroundColor(yourColor)。这样,您甚至不必费心使用 g2d.drawString() 绘制按钮文本。

仅供参考,您根本没有使用构造函数参数。以下对我有用:

public class Bouton extends JButton implements MouseListener{
public Bouton(String str, Color bcolornorm, Color bcolorhover, Color bcolorclic){
    super(str);
    this.name = str;
    this.bcolornorm = bcolornorm;
    this.bcolorhover = bcolorhover;
    this.bcolorclic = bcolorclic;
    this.setBackground(this.bcolornorm);
    this.addMouseListener(this);
}
private String name;
public Color bcolornorm;
public Color bcolorhover;
public Color bcolorclic;


public void mouseClicked(MouseEvent event) {}

public void mouseEntered(MouseEvent event) {
    this.setBackground(this.bcolorhover);
}
public void mouseExited(MouseEvent event) {
    this.setBackground(this.bcolornorm);
}
public void mousePressed(MouseEvent event) {
    this.setBackground(this.bcolorclic);
}
public void mouseReleased(MouseEvent event) {
    this.setBackground(this.bcolorhover);
}
}

【讨论】:

  • 哦,是的,我完全忘记了这样做。bcolornorm = bcolornorm 等。这样做后效果很好,谢谢 :D 至于paintComponent,它在 openclassroom 的教程中,所以我想它是必需的为某事。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2011-04-04
  • 2016-10-30
  • 2017-04-28
  • 2022-01-09
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多