繁体   English   中英

按下JButton时如何更改图标

[英]How to change an Icon when JButton is Pressed

我希望在单击Jbutton时更改图标。 我将button1绑定到打印“开”或“关”的操作命令。 我希望按钮将图标从表示关闭的圆圈图像更改为表示打开的电源按钮图像。 我已经尝试了很多事情,但是还没有找到解决方案,所以我想知道是否有一种简单的方法可以做到这一点,或者是否没有一种简单的方法,而且我不得不为每个按钮创建一个更复杂的方法。 任何建议都将不胜感激,因为Im处于死胡同。 随意编辑大图块或添加内容,因为我接受所有想法。 该代码包含在下面

import java.awt.*; 
import javax.swing.*;
import java.io.*;
import java.awt.event.*;


public class OnandOff{

  public static void main(String[] a){
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(new ButtonDemo());
    f.setSize(600,500);
    f.setVisible(true);

  }
}

class ButtonDemo extends JPanel implements ActionListener {
  JTextField jtf;

  public ButtonDemo() {
    try {
      SwingUtilities.invokeAndWait(new Runnable() {
        public void run() {
          makeGUI();
        }
      });
    } catch (Exception exc) {
      System.out.println("Can't create because of " + exc);
    }
  }

  private void makeGUI() {
    setLayout(new FlowLayout());
      //sets up icons
      ImageIcon OnIcon = new ImageIcon("  On.jpg");
      Icon OffIcon = new ImageIcon("Off.jpg");
      ImageIcon BlankIcon = new ImageIcon("Blank.jpg");

    //creates jbuttons with Action command
    ImageIcon button1 = new ImageIcon("Off.jpg");
    JButton jb = new JButton(button1);

    jb.setActionCommand("On");

    jb.addActionListener(this);
    add(jb);

    ImageIcon button2 = new ImageIcon("Off.jpg");
    jb = new JButton(button2);
    add(jb);

    ImageIcon button3 = new ImageIcon("Off.jpg");
    jb = new JButton(button3);
    add(jb);

    ImageIcon button4 = new ImageIcon("Off.jpg");
    jb = new JButton(button4);
    add(jb);




  }

   @Override
    //prints on and off when detecting action comand from a jbutton
    public void actionPerformed(ActionEvent ae) {

        String action = ae.getActionCommand();

        if (action.equals("On")) {

            System.out.println("Yes Button pressed!");
            ImageIcon button1 = new ImageIcon("On.jpg");

            TicTacToe.a = 1;


        }

        else if (action.equals("Off")) {

            System.out.println("No Button pressed!");

        }

    }

您忘记在任何按钮上调用setIcon(...) 正如AbstractButton API会告诉您的(这是JButton的父类),只需调用setIcon(Icon icon)方法并传入新的Icon即可轻松更改任何按钮的图标。 将来,请先访问API,因为在那里您将学到很多东西,包括可以完全满足您需要的方法。

其他建议:不要给变量名与变量名不符。 例如,您正在调用一个ImageIcon变量“ button1”,就好像它是一个JButton一样,这会使其他编码人员和您的未来自我困惑。 相反,为什么不叫它“ onIcon”或“ offIcon”,这是使代码自我注释的名称。

代码的一个主要问题,以及编写该代码的原因之一,使它无法正常工作-JButton对象被分配给局部变量,这些变量仅在声明的方法中可见。 如果希望JButton对象能够在类的不同方法中更改图标,则必须在类级别而不是方法或构造函数或更深的级别上声明它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM