gpt4 book ai didi

java - 将图像添加到按钮 GUI Java

转载 作者:行者123 更新时间:2023-12-01 04:38:20 24 4
gpt4 key购买 nike

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

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

}
}

最佳答案

我会像获取 JLabel 的图标一样获取按钮的 ImageIcon。所以而不是

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 事件调度线程(或 EDT),从而卡住您的应用程序。该代码是否应该在后台线程(例如 SwingWorker)中运行?

关于java - 将图像添加到按钮 GUI Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17010725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com