如何更改Java按钮的颜色?

时间:2018-02-13 06:48:10

标签: java swing

所以我正在努力学习挥杆,并且在尝试改变按钮颜色时遇到一些麻烦。我想要做的是创建一个自定义按钮,它有三种不同的状态,UP,DOWN和MISSING。 UP应该显示一个Icon,down应该是蓝色,MISSING应该是白色。

问题在于,我似乎无法使用枚举来改变类“内部”的颜色,而是必须创建一个新类或更改类之外的背景颜色,这将使枚举变得毫无意义。我搞砸了哪里?

import java.awt.*;
import javax.swing.*;
import static javax.swing.JOptionPane.*;

public class Card extends JButton {

    Icon icon;
    Status status;

    public enum Status {
    MISSING, DOWN, UP
    }

    public Card(Icon icon) {
    this.icon = icon;
    setStatus(Card.Status.MISSING);
    }

    public Card(Icon icon, Status status){
    this.icon = icon;
    setStatus(status);  
    }

    public Card(Status status) {
    setStatus(status);
    }

    public void setStatus(Status newStatus) {
    this.status = newStatus;
    switch(status){
    case MISSING:
        this.setBackground(Color.white);
    case DOWN:
        this.setBackground(Color.blue);
    case UP:
        this.setIcon(icon);
    }
    }

    public Status getStatus() {
    return this.status;
    }  
}

1 个答案:

答案 0 :(得分:2)

function removeClient($file, $post, $client) {
    $json = json_decode(file_get_contents($file));
    $json[$post] = array_filter($json[$post], function($x) use($client) {
        return $x != $client;
    });
    file_put_contents($file, json_encode($json));
}

这将最终落入瀑布。将您的代码更改为:

case MISSING:
        this.setBackground(Color.white);
    case DOWN:
        this.setBackground(Color.blue);
    case UP:
        this.setIcon(icon);

如果你不这样做,瀑布原则将执行以下所有案例块,导致每个选项执行 case MISSING: this.setBackground(Color.white); break; // ends the switch block in case of missing case DOWN: this.setBackground(Color.blue); break; // ends the switch block in case of down case UP: this.setIcon(icon); 作为每个案例的最终陈述,this.setIcon(icon);作为遗失和失败的颜色。