gpt4 book ai didi

java - 更改所选 jbutton 的边框颜色而不命名按钮

转载 作者:行者123 更新时间:2023-11-30 07:02:44 25 4
gpt4 key购买 nike

因此,该应用程序启动一个 JFrame,其中有 25 个按钮排列在 5 x 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);
}

}

<小时/>

此类设置用户界面。

package code.ui;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

import code.model.Model;

public class UI implements Runnable {

private JFrame _frame;
private Model _model;
private JButton _currentButton;

private ArrayList<JButton> _buttons;
private JButton _spin;

@Override public void run() {
_frame = new JFrame("Sanchit Batra's Lab 8");
_frame.getContentPane().setLayout(new GridLayout(5, 5, 10, 10));

_buttons = new ArrayList<JButton>();
for (int i=0; i<25; i++) {
JButton button = new JButton();
ActionListener x = new EventHandler(_model);
button.addActionListener(x);
_buttons.add(button);
_frame.getContentPane().add(button);
}

_model = new Model(); // create the model for this UI
_model.addObserver(this);


// standard JFrame method calls
_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
_frame.pack();
_frame.setVisible(true);
_model.spin();
}

public void setIcon() {
// update the icon on each label
for (int i=0; i<25; i=i+1) {
_buttons.get(i).setIcon(new ImageIcon("Images/"+_model.getImageFileName(i)));
}

// make sure JFrame is appropriately sized (needed when _spin text changes)
_frame.pack();
}

public JButton getCurrentButton(){
return _currentButton;
}

}

该类处理该事件。

package code.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import code.model.Model;

public class EventHandler implements ActionListener {

private Model _model;

public EventHandler(Model m) {
_model = m;
}

@Override public void actionPerformed(ActionEvent e) {



}

}

这个类有 main 方法。

package code;

public class Driver {

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

}

最佳答案

When I select a button, the border color changes to blue.

您无法选择按钮。我认为你的意思是当鼠标悬停在按钮上时。

Is there a way I can change the border color to red? I don't know how to change the border of a button that is currently selected without using names for each button,

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

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

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

当您使用此方法时,您可以创建一个由所有按钮共享的 MouseListener。

关于java - 更改所选 jbutton 的边框颜色而不命名按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com