Java 使用ImageIcon刷新JButton的方法有哪些?

Java 使用ImageIcon刷新JButton的方法有哪些?,java,swing,jbutton,repaint,Java,Swing,Jbutton,Repaint,正如标题所说,除了repaint()、validate()和invalidate(),还有什么方法可以重新绘制JButton?我用这些重新画我的按钮,但它仍然是一样的。这是我的密码: package buttonrepaint; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.ut

正如标题所说,除了
repaint()
validate()
invalidate()
,还有什么方法可以重新绘制
JButton
?我用这些重新画我的按钮,但它仍然是一样的。这是我的密码:

package buttonrepaint;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;


public class Buttonrepaint {

JFrame Card = new JFrame();
GridBagConstraints c = new GridBagConstraints();
Border etch = BorderFactory.createEtchedBorder(Color.white,Color.gray);

public static String buttonname;
public static String num1="";   public static String num2=""; public static String num3="";


public static int flagnum1=1, flagnum2=1, flagnum3=1;


JButton btn_1;  JButton btn_2;  JButton btn_3;


    static int buttonGroup=1;
int stat = 0;

   public static ArrayList<HashMap<String, String>> prodbutton = getProductsButton(buttonGroup);


public Buttonrepaint(){
        Card.setVisible(true);
    Card.setSize(522,500);
    Card.setTitle("Frequency Distribution");
    Card.setResizable(false);

    final Toolkit toolkit = Toolkit.getDefaultToolkit();
    Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();      
    int x=(int)((dimension.getWidth() - Card.getWidth())/4);
    int y=(int)((dimension.getHeight() - Card.getHeight())/2);

    Card.setLocation(x, y);
            Card.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    FlowLayout flow_1 = new FlowLayout(FlowLayout.RIGHT,1,1);
    final JPanel panel_1 = new JPanel();
    panel_1.setBackground(Color.WHITE);
    panel_1.setBorder(new EmptyBorder(10, 10, 10, 10));
    panel_1.setLayout(flow_1);

    final JButton btnGroup3 = new JButton("Next");
    //btnGroup3.setIcon(new ImageIcon("more_buttons\\yellow.png"));
    //btnGroup3.setBorderPainted(false);  
           // btnGroup3.setFocusPainted(false);
           // btnGroup3.setContentAreaFilled(false); 
            btnGroup3.setHorizontalTextPosition(JButton.CENTER);
    btnGroup3.setFont(new Font("Calibri", Font.PLAIN, 18));
    btnGroup3.setPreferredSize(new Dimension(80, 80));
    btnGroup3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            buttonGroup++;

            if(prodbutton==null)
            {
                btnGroup3.setText("Back");
                prodbutton.clear();
                stat=1;
                btn_1.invalidate();
            }
            else
            {
                System.out.println("EMPTY!!!!!");
                buttonGroup--;
                stat=0;
            }


        }
    });
    panel_1.add(btnGroup3);
    try{
        num1=Capitalize(prodbutton.get(0).get("prodname"));

        if(prodbutton.get(0).get("butstatus").equals("0"))
        {flagnum1=0;}
    }catch (Exception e) 
        {flagnum1=0;}       

    try{
        num2=Capitalize(prodbutton.get(1).get("prodname"));

        if(prodbutton.get(1).get("butstatus").equals("0"))
        {flagnum2=0;}
    }catch (Exception e) 
        {flagnum2=0;}   

    try{
        num3=Capitalize(prodbutton.get(2).get("prodname"));

        if(prodbutton.get(2).get("butstatus").equals("0"))
        {flagnum3=0;}
    }catch (Exception e) 
        {flagnum3=0;}   


    btn_1 = new JButton("<html><p align=center>"+num1+"</p></html>");
    //btn_1.setIcon(new ImageIcon("more_buttons\\lightblue.png"));
    //btn_1.setBorderPainted(false);  
            //btn_1.setFocusPainted(false);
            //btn_1.setContentAreaFilled(false); 
            btn_1.setHorizontalTextPosition(JButton.CENTER);
    btn_1.setFont(new Font("Calibri", Font.BOLD, 14));
    btn_1.setPreferredSize(new Dimension(80, 80));

    if(flagnum1==0)
    {   btn_1.setEnabled(false);    }
    btn_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try{

                if(flagnum1==1)
                {
                    if(num1!=null)
                    {
                        buttonname = prodbutton.get(0).get("prodname");
                        //quantity_panel qp = new quantity_panel();
                    }

                }
                if (stat==1)
                {

                    buttonname=buttonname;

                    //quantity_panel qp = new quantity_panel();
                }


            }catch (Exception e) {System.out.println("Error~");}
        }
    });
    panel_1.add(btn_1);

    btn_2 = new JButton("<html><p align=center>"+num2+"</p></html>");
    //btn_2.setIcon(new ImageIcon("more_buttons\\lightblue.png"));
    //btn_2.setBorderPainted(false);  
           // btn_2.setFocusPainted(false);
           // btn_2.setContentAreaFilled(false); 
            btn_2.setHorizontalTextPosition(JButton.CENTER);
    btn_2.setFont(new Font("Calibri", Font.BOLD, 14));
    btn_2.setPreferredSize(new Dimension(80, 80));

    if(flagnum2==0)
    {   btn_2.setEnabled(false);    }

    btn_2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        try{
                if(flagnum2==1)
                {
                    if(num2!=null)
                    {
                        buttonname = prodbutton.get(1).get("prodname");
                        //quantity_panel qp = new quantity_panel();
                    }
                }

            }catch (Exception e) {}
        }
    });
    panel_1.add(btn_2);

    btn_3 = new JButton("<html><p align=center>"+num3+"</p></html>");
    //btn_3.setIcon(new ImageIcon("more_buttons\\lightblue.png"));
    //btn_3.setBorderPainted(false);  
            //btn_3.setFocusPainted(false);
            //btn_3.setContentAreaFilled(false); 
            //btn_3.setHorizontalTextPosition(JButton.CENTER);
    btn_3.setFont(new Font("Calibri", Font.BOLD, 14));
    btn_3.setPreferredSize(new Dimension(80, 80));

    if(flagnum3==0)
    {   btn_3.setEnabled(false);    }

    btn_3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try{
                if(flagnum3==1)
                {
                    if(num3!=null)
                    {
                        buttonname = prodbutton.get(2).get("prodname");
                        //quantity_panel qp = new quantity_panel();
                    }
                }

            }catch (Exception e) {}
        }
    });
    panel_1.add(btn_3);



    Card.add(panel_1);
}


    public static String Capitalize(String text)
{

    String tmp[] = text.split(" ");
    int ctr=tmp.length;
    if(tmp.length>3)
    {ctr=3;}
    text="";

    for(int i=0; i<ctr; i++)
    {
        String firstLetter = tmp[i].substring(0,1).toUpperCase();
        String restLetters = tmp[i].substring(1).toLowerCase();
        String converted = firstLetter + restLetters;

        if (converted.length()>6)
        {
            converted = converted.substring(0,6)+"..";
        }

        if(i!=(ctr-1))
        {
            text = text+converted+"<br/>";
        }
        else
        {
            text = text+converted;
        }
    }

    return text;

  }

    public static ArrayList<HashMap<String, String>> getProductsButton(int groupnum) {

            ArrayList<HashMap<String, String>> prodbutton = new         ArrayList<HashMap<String, String>>();
            HashMap<String, String> tmp = new HashMap<String,String>();
            tmp.put("A","A");   
            tmp.put("B","B");
            tmp.put("C","C");
            prodbutton.add(tmp);

        return prodbutton;
            }

public static void main(String[] args) {
     EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
           Buttonrepaint test = new Buttonrepaint();
        }
    });
}

}
包装按钮重新喷漆;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.HashMap;
导入javax.swing.*;
导入javax.swing.border.border;
导入javax.swing.border.EmptyBorder;
公共类按钮油漆{
JFrame卡=新JFrame();
GridBagConstraints c=新的GridBagConstraints();
边框蚀刻=BorderFactory.createEtchedBorder(颜色.白色,颜色.灰色);
公共静态字符串按钮名;
公共静态字符串num1=“”;公共静态字符串num2=“”;公共静态字符串num3=“”;
公共静态int flagnum1=1,flagnum2=1,flagnum3=1;
按钮btn_1;按钮btn_2;按钮btn_3;
静态int按钮组=1;
int stat=0;
公共静态ArrayList prodbutton=getProductsButton(buttonGroup);
公共按钮油漆(){
设置为可见(真);
卡片设置尺寸(522500);
卡片。设置标题(“频率分布”);
卡片。可设置大小(假);
final Toolkit=Toolkit.getDefaultToolkit();
维度=Toolkit.getDefaultToolkit().getScreenSize();
int x=(int)((dimension.getWidth()-Card.getWidth())/4);
int y=(int)((dimension.getHeight()-Card.getHeight())/2);
卡片设置位置(x,y);
Card.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
FlowLayout flow_1=新的FlowLayout(FlowLayout.RIGHT,1,1);
最终JPanel面板_1=新JPanel();
面板1.立根背景(颜色:白色);
面板_1.新订单(新的清空订单(10,10,10,10));
面板1.设置布局(流程1);
最终JButton btnGroup3=新JButton(“下一步”);
//btnGroup3.setIcon(新的图像图标(“更多按钮\\yellow.png”);
//btnGroup3.1(假);
//btnGroup3.设置焦点已绘制(假);
//btnGroup3.setContentAreaFilled(false);
btnGroup3.setHorizontalTextPosition(JButton.CENTER);
btnGroup3.setFont(新字体(“Calibri”,Font.PLAIN,18));
btnGroup3.setPreferredSize(新维度(80,80));
btnGroup3.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件arg0){
按钮组++;
如果(prodbutton==null)
{
btnGroup3.setText(“返回”);
prodbutton.clear();
stat=1;
btn_1.invalidate();
}
其他的
{
System.out.println(“空!!!”;
按钮组--;
stat=0;
}
}
});
面板1.添加(BTN组3);
试一试{
num1=大写(prodbutton.get(0.get(“prodname”));
if(prodbutton.get(0.get(“butstatus”).equals(“0”))
{flagnum1=0;}
}捕获(例外e)
{flagnum1=0;}
试一试{
num2=大写(prodbutton.get(1.get(“prodname”));
if(prodbutton.get(1.get(“butstatus”).equals(“0”))
{flagnum2=0;}
}捕获(例外e)
{flagnum2=0;}
试一试{
num3=大写(prodbutton.get(2.get(“prodname”));
if(prodbutton.get(2.get(“butstatus”).equals(“0”))
{flagnum3=0;}
}捕获(例外e)
{flagnum3=0;}
btn_1=新的JButton(“

”+num1+”

”; //btn_1.设置图标(新图像图标(“更多按钮\\lightblue.png”); //btn_1.图1(假); //btn_1.设置焦点已上色(假); //btn_1.设置内容区域已填充(假); btn_1.设置水平文本位置(JButton.CENTER); btn_1.设置字体(新字体(“Calibri”,Font.BOLD,14)); btn_1.设置首选尺寸(新尺寸(80,80)); 如果(flagnum1==0) {btn_1.setEnabled(false);} btn_1.addActionListener(新ActionListener(){ 已执行的公共无效操作(操作事件arg0){ 试一试{ 如果(flagnum1==1) { 如果(num1!=null) { buttonname=prodbutton.get(0.get(“prodname”); //数量面板qp=新数量面板(); } } 如果(stat==1) { 按钮名称=按钮名称; //数量面板qp=新数量面板(); } }catch(异常e){System.out.println(“Error~”);} } }); 面板1.添加(btn_1); btn_2=新的JButton(“

”+num2+”

”; //btn_2.setIcon(新图像图标(“更多按钮\\lightblue.png”); //btn_2.已涂漆(假); //btn_2.设置焦距(假); //btn_2.设置内容区域已填充(假); btn_2.设置水平文本位置(JButton.CENTER); btn_2.setFont(新字体(“Calibri”,Font.BOLD,14)); btn_2.设置首选尺寸(新尺寸(80,80)); 如果(flagnum2==0) {btn_2.setEnabled(false);} btn_2.addActionListener(新ActionListener(){ 已执行的公共无效操作(操作事件arg0){ 试一试{ 如果(flagnum2==1) { 如果(num2!=null) { buttonname=prodbutton.get(1.get(“prodname”); //数量面板qp=新数量面板(); } } }捕获(例外e){} } }); 面板1.添加(btn_2); btn_3=新的JButton(“

”+num3+”

”; //btn_3.设置图标(新图像图标(“更多按钮\\lightblue.png”); //btn_3.已涂漆(假); //btn_3.设置聚焦(假); //btn_3.设置内容区域已填充(假); //btn_3.设置水平文本位置(JButton.CENTER); btn_3.setFont(新字体(“Calibri”,Font.BOLD,14)); btn_3.设置首选尺寸(新尺寸(80,80)); 如果(f)
public void actionPerformed(ActionEvent arg0) {
        buttonGroup++;

        if(prodbutton!=null)
        {
            btnGroup3.setText("Back");
            prodbutton.clear();
            stat=1;
            btn_1.repaint(); // button here should refresh
        }
        else
        {
            System.out.println("EMPTY!!!!!");
            buttonGroup--;
            stat=0;
        }
    }
public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 80);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        final Container contentPane = frame.getContentPane();
        contentPane.setLayout(new FlowLayout());

        JButton buttonA = new JButton("A");
        JButton buttonB = new JButton("B");
        JButton buttonC = new JButton("C");

        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(buttonA);
        buttonGroup.add(buttonB);
        buttonGroup.add(buttonC);

        ButtonGroupVisibilityToggleChange toggleChange = new ButtonGroupVisibilityToggleChange();
        ButtonGroupToggleAction toggleAction = new ButtonGroupToggleAction(
                buttonGroup, toggleChange);

        JButton buttonGroupVisibilityButton = new JButton(toggleAction);

        contentPane.add(buttonGroupVisibilityButton);
        contentPane.add(buttonA);
        contentPane.add(buttonB);
        contentPane.add(buttonC);

        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}
interface ButtonGroupToggleChange {
    public boolean toggle(ButtonGroup buttonGroup, boolean actualToggleState);
}
class ButtonGroupVisibilityToggleChange implements ButtonGroupToggleChange {

    public boolean toggle(ButtonGroup buttonGroup, boolean actualToggleState) {
        boolean nextVisibleState = !actualToggleState;
        Enumeration<AbstractButton> buttons = buttonGroup.getElements();
        while (buttons.hasMoreElements()) {
            AbstractButton abstractButton = buttons.nextElement();
            abstractButton.setVisible(nextVisibleState);
            Container parent = abstractButton.getParent();
            if (parent != null) {
                parent.revalidate();
            }
        }

        return nextVisibleState;
    }
}
class ButtonGroupToggleAction extends AbstractAction {

    private static final long serialVersionUID = -1345619745031378545L;

    private ButtonGroup buttonGroup;
    private boolean toggleState = true;
    private String toggleOnName = "Hide";
    private String toogleOffName = "Show";

    private ButtonGroupToggleChange buttonGroupToggleChange;

    public ButtonGroupToggleAction(ButtonGroup buttonGroup,
            ButtonGroupToggleChange buttonGroupToggleChange) {
        this.buttonGroup = buttonGroup;
        this.buttonGroupToggleChange = buttonGroupToggleChange;
        executeToggleButtonChange();
    }

    public void actionPerformed(ActionEvent e) {
        executeToggleButtonChange();
    }

    private void executeToggleButtonChange() {
        toggleState = buttonGroupToggleChange.toggle(buttonGroup, toggleState);
        setToggleName(toggleState);
    }

    public String getToggleOnName() {
        return toggleOnName;
    }

    public void setToggleOnName(String toggleOnName) {
        this.toggleOnName = toggleOnName;
        setToggleName(toggleState);
    }

    public String getToogleOffName() {
        return toogleOffName;
    }

    public void setToogleOffName(String toogleOffName) {
        this.toogleOffName = toogleOffName;
        setToggleName(toggleState);
    }

    private void setToggleName(boolean visible) {
        if (visible) {
            putValue(Action.NAME, toggleOnName);
        } else {
            putValue(Action.NAME, toogleOffName);
        }
    }
}