Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改选定jbutton的边框颜色而不命名按钮_Java_Swing - Fatal编程技术网

Java 更改选定jbutton的边框颜色而不命名按钮

Java 更改选定jbutton的边框颜色而不命名按钮,java,swing,Java,Swing,因此,这个应用程序启动了一个JFrame,它有25个按钮,按5乘5的网格排列。这应该是一个像《糖果粉碎》这样的游戏,如果你能在一行或一列中找到三个颜色相似的按钮,你就赢了。当我选择一个按钮时,边框颜色变为蓝色。有没有办法把边框颜色改成红色?我不知道如何在不使用每个按钮的名称的情况下更改当前选中的按钮的边框,我被要求不要这样做。这些按钮是使用for循环创建的,因此它们没有名称。此外,代码来自以前的一个项目,并且正在为这个项目进行调整,因此可能有一些片段对于这个项目来说是不必要的,或者可能需要更改。

因此,这个应用程序启动了一个JFrame,它有25个按钮,按5乘5的网格排列。这应该是一个像《糖果粉碎》这样的游戏,如果你能在一行或一列中找到三个颜色相似的按钮,你就赢了。当我选择一个按钮时,边框颜色变为蓝色。有没有办法把边框颜色改成红色?我不知道如何在不使用每个按钮的名称的情况下更改当前选中的按钮的边框,我被要求不要这样做。这些按钮是使用for循环创建的,因此它们没有名称。此外,代码来自以前的一个项目,并且正在为这个项目进行调整,因此可能有一些片段对于这个项目来说是不必要的,或者可能需要更改。忽略所有这些,现在我只想弄清楚如何更改所选按钮的边框颜色

这是处理游戏初始状态设置的类

package code.model;

import java.util.ArrayList;
import java.util.Random;

import code.ui.UI;

public class Model {

private UI _observer;  // initialized by setObserver method
private Random _rand;  // for randomization
private ArrayList<String> _imageFileNames;  // the names of the image files
private ArrayList<String> _spinnerCurrentValues;  // the image files to display in the UI

public Model() {
    _rand = new Random();

    _imageFileNames = new ArrayList<String>();
    _imageFileNames.add("Tile-0.png");
    _imageFileNames.add("Tile-1.png");
    _imageFileNames.add("Tile-2.png");
    _imageFileNames.add("Tile-3.png");
    _imageFileNames.add("Tile-4.png");
    _imageFileNames.add("Tile-5.png");

    _spinnerCurrentValues = new ArrayList<String>();
    for(int i=0; i<25; i=i+1) {
        _spinnerCurrentValues.add(i,null);
    }
    System.out.println(_spinnerCurrentValues);

    spin(); // randomly select which images to display
}

public void spin() {
    for(int i=0; i<25; i=i+1) {
        _spinnerCurrentValues.set(i, _imageFileNames.get(_rand.nextInt(_imageFileNames.size())));
    }
    stateChanged();  // tell the UI that the model's state has changed
}

public boolean jackpot() {
    for (int i=1; i<_spinnerCurrentValues.size(); i=i+1) {
        if ( ! _spinnerCurrentValues.get(i-1).equals(_spinnerCurrentValues.get(i)) ) {
            return false;
        }
    }
    return true;  // all three spinners are displaying the same image (based on image file name)
}

public void addObserver(UI ui) {
    _observer = ui;
}

public void stateChanged() {
    if (_observer != null) {
        _observer.setIcon();  // tell the UI to update
    }
}

public String getImageFileName(int i) {
    return _spinnerCurrentValues.get(i);
}
}

这个类有main方法

package code;

public class Driver {

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new code.ui.UI());
}
}

当我选择一个按钮时,边框颜色变为蓝色

您不能选择按钮。我想你的意思是鼠标悬停在按钮上

有没有办法把边框颜色改成红色?我不知道如何更改当前选定按钮的边框,而不使用每个按钮的名称

因此,要监听鼠标进入和退出组件,您需要使用
MouseListener
并实现
mouseEntered(…)
mouseExited()
方法

然后在侦听器代码中,您可以使用:

JButton button = (JButton)event.getSource();
button.setBorder(...);

当您使用这种方法时,您可以创建一个由所有按钮共享的鼠标侦听器。

当我选择一个按钮时
定义选择…您的意思是当您单击它时吗?完全重复最有可能是我检查了该链接,它没有太大帮助。。我将尝试getSource()方法,它可能正是我所寻找的。我所说的选择是指点击。它成功了!非常感谢!我希望我能投票支持这一点,但在JButtonsAPI或ChangeListener中没有足够的声誉来访问ButtonModel
package code;

public class Driver {

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new code.ui.UI());
}
JButton button = (JButton)event.getSource();
button.setBorder(...);