簡體   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