Java 在单击按钮时将图像放置在随机网格点
我正在使用Java和WindowBuilder 我在jframe上用jlabel创建了一个4x4网格(每个网格点都是不同的jlabel)。 我还有一个叫做btnPlace的按钮。 我想做的是让一个图像出现在一个随机网格点上的按钮点击。图像文件名为red.png,它是一个红色圆圈。图像可以出现在除网格点编号1之外的任何网格点。Java 在单击按钮时将图像放置在随机网格点,java,image,swing,random,jlabel,Java,Image,Swing,Random,Jlabel,我正在使用Java和WindowBuilder 我在jframe上用jlabel创建了一个4x4网格(每个网格点都是不同的jlabel)。 我还有一个叫做btnPlace的按钮。 我想做的是让一个图像出现在一个随机网格点上的按钮点击。图像文件名为red.png,它是一个红色圆圈。图像可以出现在除网格点编号1之外的任何网格点。 有点像这样: 这是我的密码: public class grid { public static void main (String[] args) { J
有点像这样: 这是我的密码:
public class grid {
public static void main (String[] args)
{
JFrame grid =new JFrame();
grid.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
JPanel set = new JPanel();
set.setBounds(10, 11, 307, 287);
grid.getContentPane().add(set);
set.setLayout(new GridLayout(4, 4, 0, 0));
JLabel a = new JLabel("");
set.add(a);
JLabel b = new JLabel("");
set.add(b);
JLabel c = new JLabel("");
set.add(c);
^^ this repeats up to JLabel p. just to save time.
JButton btnPlace = new JButton("Place");
grid.getContentPane().add(btnPlace);
grid.setVisible(true);
} }
我将创建一个自定义JPanel并添加一个鼠标侦听器。每当单击面板时,将在面板上单击的点绘制图像
public class grid{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.add(new MyPanel());
}
}
class MyPanel extends JPanel{
Point p;
BufferedImage img;
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
p = e.getLocationOnScreen();
repaint();
}
});
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
try{
img = ImageIO.read("someImage.png");
}catch(Exception e){e.printStackTrace();}
g.drawImage(img, p.getX(), p.getY(), width, height, this);
}
}
下面是一个完整的工作示例: 按下按钮,它将在随机选择的标签上绘制图像
package stackoverflow;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DummyColor {
private JFrame frame;
private JLabel[] labels = new JLabel[4];
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DummyColor window = new DummyColor();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public DummyColor() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setResizable(false);
frame.setBounds(100, 100, 657, 527);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lbl1 = new JLabel("First BOX");
lbl1.setBounds(10, 11, 273, 194);
frame.getContentPane().add(lbl1);
JLabel label = new JLabel("Second BOX");
label.setBounds(336, 11, 273, 194);
frame.getContentPane().add(label);
JLabel label_1 = new JLabel("Third BOX");
label_1.setBounds(10, 251, 273, 194);
frame.getContentPane().add(label_1);
JLabel label_2 = new JLabel("Fourth BOX");
label_2.setBounds(347, 251, 273, 194);
frame.getContentPane().add(label_2);
labels[0] = lbl1;
labels[1] = label;
labels[2] = label_1;
labels[3] = label_2;
JButton btnPick = new JButton("Place");
btnPick.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ImageIcon imageIcon = new ImageIcon(DummyColor.class.getResource("/red.jpg"));
int randInt = randInt(1, 4);
System.out.println(randInt);
for (int i = 0; i < labels.length; i++) {
JLabel jLabel = labels[i];
if (i == randInt - 1) {
jLabel.setIcon(imageIcon);
} else {
jLabel.setIcon(null);
}
}
}
});
btnPick.setBounds(10, 439, 57, 23);
frame.getContentPane().add(btnPick);
}
private static int randInt(int min, int max) {
// Usually this can be a field rather than a method variable
Random rand = new Random();
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
}
包堆栈溢出;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.Random;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
公共级双色{
私有JFrame;
私有JLabel[]标签=新JLabel[4];
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
DummyColor窗口=新的DummyColor();
window.frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建应用程序。
*/
公共色(){
初始化();
}
/**
*初始化框架的内容。
*/
私有void初始化(){
frame=新的JFrame();
frame.setresizeable(false);
机架立根(100100657527);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lbl1=新JLabel(“第一个框”);
lbl1.立根(10,11,273,194);
frame.getContentPane().add(lbl1);
JLabel标签=新的JLabel(“第二个框”);
标签.立根(336,11,273,194);
frame.getContentPane().add(标签);
JLabel标签_1=新的JLabel(“第三个框”);
标签1.立根(10251273194);
frame.getContentPane().add(标签_1);
JLabel标签_2=新的JLabel(“第四个框”);
标签2.立根(347251273194);
frame.getContentPane().add(标签2);
标签[0]=lbl1;
标签[1]=标签;
标签[2]=标签1;
标签[3]=标签2;
JButton btnPick=新JButton(“位置”);
btnPick.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
ImageIcon=newImageIcon(DummyColor.class.getResource(“/red.jpg”);
int-randInt=randInt(1,4);
System.out.println(randInt);
对于(int i=0;i