JLabel不在MouseEvent上更改颜色?JAVA
我添加这个程序已经有一段时间了,现在慢慢地从一个简单的计算器开发出来,但是现在这个程序没有错误,但是没有给我想要的输出。它应该变成蓝色,但不会。我添加了resultPane.set前台(Color.BLUE);但不会更新JLabelJLabel不在MouseEvent上更改颜色?JAVA,java,swing,colors,mouseevent,mouselistener,Java,Swing,Colors,Mouseevent,Mouselistener,我添加这个程序已经有一段时间了,现在慢慢地从一个简单的计算器开发出来,但是现在这个程序没有错误,但是没有给我想要的输出。它应该变成蓝色,但不会。我添加了resultPane.set前台(Color.BLUE);但不会更新JLabel public class TestCalculator { private ResultPane resultPane; public static void main(String[] args) { new TestCalculator(); } p
public class TestCalculator {
private ResultPane resultPane;
public static void main(String[] args) {
new TestCalculator();
}
public TestCalculator() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
resultPane = new ResultPane();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setGlassPane(resultPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new CalculatorPane(resultPane));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ResultPane extends JPanel {
private JLabel result;
private Timer timer;
private int xDelta = (Math.random() > 0.5) ? 1 : -1;
private int yDelta = (Math.random() > 0.5) ? 1 : -1;
public ResultPane() {
setOpaque(false);
setLayout(null);
result = new JLabel();
Font font = result.getFont();
font = font.deriveFont(Font.BOLD, 26f);
result.setFont(font);
add(result);
HandlerClass handler = new HandlerClass();
result.addMouseListener(handler);
result.addMouseMotionListener(handler);
timer = new Timer(40, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Point point = result.getLocation();
point.x += xDelta;
point.y += yDelta;
if (point.x < 0) {
point.x = 0;
xDelta *= -1;
} else if (point.x + result.getWidth() > getWidth()) {
point.x = getWidth() - result.getWidth();
xDelta *= -1;
}
if (point.y < 0) {
point.y = 0;
yDelta *= -1;
} else if (point.y + result.getHeight() > getHeight()) {
point.y = getHeight() - result.getHeight();
yDelta *= -1;
}
result.setLocation(point);
repaint();
}
});
timer.start();
}
public void setResult(Number number) {
result.setText(NumberFormat.getNumberInstance().format(number));
result.setSize(result.getPreferredSize());
setVisible(true);
}
public String getResultText() {
return result.getText();
}
}
public class CalculatorPane extends JPanel {
private final ResultPane resultPane;
private final JLabel firstNumberLabel = new JLabel("First Number:");
private final JLabel secondNumberLabel = new JLabel("Second Number:");
private final JTextField firstNumberField = new JTextField(5);
private final JTextField secondNumberField = new JTextField(5);
public double result = 0.0;
public CalculatorPane(ResultPane resultPane) {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
this.resultPane = resultPane;
JPanel fields = new JPanel();
fields.add(firstNumberLabel);
fields.add(firstNumberField);
fields.add(secondNumberLabel);
fields.add(secondNumberField);
add(fields, gbc);
JPanel buttons = new JPanel();
buttons.add(new JButton(new AddAction()));
buttons.add(new JButton(new SubtractAction()));
buttons.add(new JButton(new MultiplyAction()));
buttons.add(new JButton(new DivideAction()));
add(buttons, gbc);
}
public class AddAction extends AbstractAction {
public AddAction() {
putValue(NAME, "+");
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double num1 = Double.parseDouble(firstNumberField.getText());
double num2 = Double.parseDouble(secondNumberField.getText());
double result = num1 + num2;
resultPane.setResult(result);
String resultText = resultPane.getResultText();
firstNumberField.setText(resultText);
} catch (NumberFormatException exp) {
}
}
}
public class SubtractAction extends AbstractAction {
public SubtractAction() {
putValue(NAME, "-");
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double num1 = Double.parseDouble(firstNumberField.getText());
double num2 = Double.parseDouble(secondNumberField.getText());
double result = num1 - num2;
resultPane.setResult(result);
String resultText = resultPane.getResultText();
firstNumberField.setText(resultText);
} catch (NumberFormatException exp) {
}
}
}
public class MultiplyAction extends AbstractAction {
public MultiplyAction() {
putValue(NAME, "x");
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double num1 = Double.parseDouble(firstNumberField.getText());
double num2 = Double.parseDouble(secondNumberField.getText());
double result = num1 * num2;
resultPane.setResult(result);
String resultText = resultPane.getResultText();
firstNumberField.setText(resultText);
} catch (NumberFormatException exp) {
}
}
}
public class DivideAction extends AbstractAction {
public DivideAction() {
putValue(NAME, "/");
}
@Override
public void actionPerformed(ActionEvent e) {
try {
double num1 = Double.parseDouble(firstNumberField.getText());
double num2 = Double.parseDouble(secondNumberField.getText());
double result = num1 / num2;
resultPane.setResult(result);
String resultText = resultPane.getResultText();
firstNumberField.setText(resultText);
} catch (NumberFormatException exp) {
}
}
}
}
private class HandlerClass implements MouseListener, MouseMotionListener {
public void mouseClicked(MouseEvent event) {
resultPane.setForeground(Color.BLUE);
}
public void mouseReleased(MouseEvent event) {
}
public void mousePressed(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
public void mouseEntered(MouseEvent event) {
}
public void mouseMoved(MouseEvent event) {
}
public void mouseDragged(MouseEvent event){
}
}
}
公共类测试计算器{
私有ResultPane ResultPane;
公共静态void main(字符串[]args){
新的TestCalculator();
}
公共测试计算器(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
resultPane=新的resultPane();
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
JFrame=新JFrame(“测试”);
框。设置玻璃窗格(结果窗格);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
添加(新计算器平面(结果平面));
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类ResultPane扩展了JPanel{
私有JLabel结果;
私人定时器;
private int xDelta=(Math.random()>0.5)?1:-1;
private int yDelta=(Math.random()>0.5)?1:-1;
公共结果页(){
设置不透明(假);
setLayout(空);
结果=新的JLabel();
Font=result.getFont();
font=font.deriveFont(font.BOLD,26f);
result.setFont(字体);
添加(结果);
HandlerClass handler=新的HandlerClass();
结果:addMouseListener(处理程序);
addMouseMotionListener(处理程序);
计时器=新计时器(40,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
Point=result.getLocation();
点x+=xDelta;
点y+=yDelta;
如果(x点<0){
点x=0;
xDelta*=-1;
}else if(point.x+result.getWidth()>getWidth()){
point.x=getWidth()-result.getWidth();
xDelta*=-1;
}
如果(点y<0){
点y=0;
yDelta*=-1;
}else if(point.y+result.getHeight()>getHeight()){
point.y=getHeight()-result.getHeight();
yDelta*=-1;
}
结果:设置位置(点);
重新油漆();
}
});
timer.start();
}
公共无效设置结果(编号){
result.setText(NumberFormat.getNumberInstance().format(number));
result.setSize(result.getPreferredSize());
setVisible(真);
}
公共字符串getResultText(){
返回result.getText();
}
}
公共类计算器扩展JPanel{
私人最终结果页结果页;
私有最终JLabel firstNumberLabel=新JLabel(“第一个编号”);
专用最终JLabel secondNumberLabel=新JLabel(“第二个号码:”);
私有最终JTextField firstNumberField=新JTextField(5);
私有最终JTextField secondNumberField=新JTextField(5);
公共双结果=0.0;
公共计算器面板(结果面板结果面板){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
this.resultPane=resultPane;
JPanel字段=新的JPanel();
字段。添加(firstNumberLabel);
字段。添加(firstNumberField);
字段。添加(第二个数字标签);
字段。添加(secondNumberField);
添加(字段,gbc);
JPanel按钮=新的JPanel();
add(newjbutton(newaddaction());
add(newjbutton(newsubtractAction());
添加(新的JButton(新的MultiplyAction());
add(newjbutton(newdivideaction());
添加(按钮,gbc);
}
公共类AddAction扩展了AbstractAction{
公共行动(){
putValue(名称“+”);
}
@凌驾
已执行的公共无效操作(操作事件e){
试一试{
double num1=double.parseDouble(firstNumberField.getText());
double num2=double.parseDouble(secondNumberField.getText());
双结果=num1+num2;
resultPane.setResult(结果);
字符串resultText=resultPane.getResultText();
firstNumberField.setText(resultText);
}捕获(NumberFormatException exp){
}
}
}
公共类动作扩展了抽象动作{
公共行动{
putValue(名称“-”);
}
@凌驾
已执行的公共无效操作(操作事件e){
试一试{
double num1=double.parseDouble(firstNumberField.getText());
double num2=double.parseDouble(secondNumberField.getText());
双结果=num1-num2;
resultPane.setResult(结果);
字符串resultText=resultPane.getResultText();
firstNumberField.setText(resultText);
}捕获(NumberFormatException exp){
}
}
}
公共类MultiplyAction扩展了AbstractAction{
公共多重作用(){
putValue(名称,“x”);
}
@凌驾
已执行的公共无效操作(操作事件e){
试一试{
double num1=double.parseDouble(firstNumberField.getText());
double num2=double.parseDouble(secondNumberField.getText());
双结果=num1*
public void mouseClicked(MouseEvent event) {
resultPane.setForeground(Color.BLUE); // This is the problem
}
public void setLabelForeground(Color color) {
result.setForeground(color);
}