将图像添加到按钮GUI Java

时间:2013-06-09 14:38:59

标签: java image swing jbutton embedded-resource

好的,我尝试了不同的方法,但我无法将按钮更改为图像。我知道文件源是正确的,因为当我上传它只是一个图像它工作正常。这是我的代码:

ImageIcon start = new ImageIcon("start.png");
    button = new JButton (start);

    add(button);

我的整个代码

import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
import java.awt.image.WritableRaster;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class UnfollowGUI extends JFrame{

    private JLabel label;
    private JButton button;

    private ImageIcon bgi;
    private JLabel bgl;

    public static Rectangle gameSquare;

    public static boolean rock = true;
    public static boolean runningMine = true;
    public static int stray = 0;
    public static int strayCount = 0;


    public static void main(String[] args) {
        UnfollowGUI gui = new UnfollowGUI ();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // when click x close program
        //gui.setSize(886, 266);
        gui.pack();
        gui.setVisible(true);
        gui.setTitle("Solid Cloud Inc - Twitter Unfolower");
    }

    public UnfollowGUI(){

        setLayout(new FlowLayout());

        bgi = new ImageIcon(getClass().getResource("tu.png"));
        bgl = new JLabel (bgi);
        add(bgl);

        ImageIcon start = new ImageIcon("start.png");
        button = new JButton (start);

        add(button);

        label = new JLabel ("");
        add(label);

        Events e = new Events();
        button.addActionListener(e);
    }

    public class Events implements ActionListener {


        public void actionPerformed(ActionEvent e) {

            if (e.getSource() == button) {
               label.setText("Searching");
               try {
                Unfollow();
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            }
    }

    }
public static void Unfollow() throws InterruptedException{

        if (rock==true){
            runningMine = true;

        }
        if (strayCount >=2){
            runningMine = false;
            stray = 90000000;
            JOptionPane.showMessageDialog(null, "Program Ended");
            System.out.println("Program ended");
        }


        //System.out.println("look iron start");

        try {
            Robot robot = new Robot();

            while(runningMine == true){
                //while (rock == true)
                //System.out.println("searching");

                gameSquare = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); //== game square
                BufferedImage img = robot.createScreenCapture(gameSquare);
                WritableRaster r = img.getRaster();
                DataBuffer db = r.getDataBuffer();
                DataBufferInt dbi = (DataBufferInt)db;
                int[] data = dbi.getData();                 

                for (int x_scale = 0; x_scale < gameSquare.width; x_scale += 1) {
                    for(int y_scale = 0; y_scale < gameSquare.height; y_scale += 1) {
                        int rgb = data[x_scale + gameSquare.width * y_scale];
                        if (stray < 10000000){           // 2 sec                                                        

                            if ( rgb == -15817767){ //finds unfollow

                            if (runningMine == true){

                                runningMine = false;
                                stray = 0;
                                int xRock = gameSquare.x + x_scale; // sets the x and y of the point
                                int yRock = gameSquare.y + y_scale;
                                robot.mouseMove(xRock, yRock);

                                robot.mousePress(InputEvent.BUTTON1_MASK);
                                robot.mouseRelease(InputEvent.BUTTON1_MASK);
                                Thread.sleep(800);
                                strayCount = 0;
                                Unfollow();
                                //System.out.println("clicked on Rock");


                            }

                        }
                        else{
                            stray ++;
                            //lookIron();
                        }
                    }
                        else if ((stray>=10000000)&&(stray <20000000)){
                            //skillScreen();
                            //System.out.println("no unfollow buttons");
                            robot.mouseMove(1359, 704);
                            Thread.sleep(500);
                            robot.mousePress(InputEvent.BUTTON1_MASK);
                            robot.mouseRelease(InputEvent.BUTTON1_MASK);
                            Thread.sleep(1000);
                            stray = 0;
                            strayCount ++;
                            Unfollow();


                        }

                    }
                }
            }
        }
        catch(AWTException e) {
            e.printStackTrace();
        }

    }
}

2 个答案:

答案 0 :(得分:2)

我会得到按钮的ImageIcon,就像你获得JLabel的Icon一样。所以而不是

ImageIcon start = new ImageIcon("start.png");

你会这样做:

ImageIcon start = new ImageIcon(getClass().getResource("start.png"));
button = new JButton (start);

假设start.png图像与类文件一起定位,与tu.png图像相同。

这段代码让我担心:

   try {
        Robot robot = new Robot();

        while(runningMine == true){

           //....

        }

看起来它会占用Swing Event Dispatch Thread(或EDT),冻结你的应用程序。该代码是否应该在后台线程中运行,例如使用SwingWorker?

答案 1 :(得分:-2)

使图片尺寸更小,即等于按钮的尺寸,您将获得按钮上的图像。

希望它会有所帮助。