在运行时动态更改 JButton 属性 [已关闭]

问题描述 投票:0回答:1

在运行时更改 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();
}
java swing runtime jbutton
1个回答
2
投票

这是在运行时更新按钮的解决方案。

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);
            }
        }
    }
}

这是效果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.