在运行时更改JButtons属性的正确方法是什么?
此代码段可以解决问题。
private HashMap<Integer, JButton> fieldMap;
private void updateButton(int coordinate){
JButton fieldBtn = FieldMap.get(coordinate);
fieldBtn.setOpaque(true);
fieldBtn.setBackground(Color.red);
fieldBtn.setText(String.valueOf(text));
fieldBtn.updateUI();
Board.updateUI();
}
答案 0 :(得分:2)
我不知道您的代码的详细信息。请提供https://stackoverflow.com/help/mcve类似MadProgrammer的评论。
以下是在运行时更新按钮的解决方案。希望它会对你有所帮助。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.border.TitledBorder;
public class UpdateButton{
private JFrame frame;
private DemoPanel demoPanel;
JComboBox styleList;
private JButton button;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
UpdateButton updateButton = new UpdateButton();
updateButton.createUI();
updateButton.displayUI();
}
});
}
public void createUI(){
frame = new JFrame("Update Button");
ActionPanel actionPanel = new ActionPanel();
demoPanel = new DemoPanel();
frame.add(actionPanel,BorderLayout.NORTH);
frame.add(demoPanel,BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
}
public void displayUI(){
frame.setVisible(true);
}
public void doUpdate(String styleName){
if(styleName.equals("Style1")){
button.setBackground(Color.yellow);
button.setText("Style1 Button");
}else if(styleName.equals("Style2")){
button.setBackground(Color.green);
button.setText("Style2 Button");
}else if(styleName.equals("Style3")){
button.setBackground(Color.pink);
button.setText("Style3 Button");
}
}
@SuppressWarnings("serial")
class ActionPanel extends JPanel{
public ActionPanel(){
setBorder(BorderFactory.createTitledBorder(getBorder(), "ActionPanel", TitledBorder.LEADING, TitledBorder.TOP, new Font("Default",Font.PLAIN,10), Color.gray));
String[] style= { "Style1", "Style2", "Style3"};
styleList = new JComboBox(style);
styleList.addItemListener(new styleListener());
add(styleList);
}
}
@SuppressWarnings("serial")
class DemoPanel extends JPanel{
public DemoPanel(){
setBorder(BorderFactory.createTitledBorder(getBorder(), "DemoPanel", TitledBorder.LEADING, TitledBorder.TOP, new Font("Default",Font.PLAIN,10), Color.gray));
button = new JButton("Ordinary Button");
add(button);
}
}
class styleListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
if(e.getStateChange() == ItemEvent.SELECTED){
String styleName = (String)e.getItem();
doUpdate(styleName);
}
}
}
}
这是效果: