通过JFrame应用程序点击选择随机图像
问题描述:
我对Java很陌生,需要一些帮助来创建我的随机图像选择器。通过JFrame应用程序点击选择随机图像
我迄今为止代码:
package main;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import java.awt.Color;
import javax.swing.*;
public class JFrameMain extends JFrame {
private JPanel contentPane;
private String []images = { "010.png", "011.png", "012.png", "019-a.png", "020-a.png", "021.png", "022.png",
"025.png", "026-a.png", "027-a.png", "028-a.png", "035.png", "036.png", "037-a.png", "038-a.png",
"039.png", "040.png", "041.png", "042.png", "046.png", "047.png", "050.png", "051.png",
"052-a.png", "053-a.png", "054.png", "055.png", "056.png", "057.png", "058.png", "059.png",
"060.png", "061.png", "062.png", "063.png", "064.png", "065.png", "066.png", "067.png", "068.png",
"072.png", "073.png", "074-a.png", "075-a.png", "076-a.png", "079.png", "080.png", "081.png",
"082.png", "088-a.png", "089-a.png", "090.png", "091.png", "092.png", "093.png", "094.png",
"096.png", "097.png", "102.png", "103-a.png", "104.png", "105-a.png", "113.png", "115.png",
"118.png", "119.png", "120.png", "121.png", "123.png", "125.png", "126.png", "127.png", "128.png",
"129.png", "130.png", "131.png", "132.png", "133.png", "134.png", "135.png", "136.png", "137.png",
"142.png", "143.png", "147.png", "148.png", "149.png", "165.png", "166.png", "167.png", "168.png",
"169.png", "170.png", "171.png", "172.png", "173.png", "174.png", "185.png", "186.png", "196.png",
"197.png", "198.png", "199.png", "200.png", "209.png", "210.png", "212.png", "215.png", "222.png",
"225.png", "227.png", "233.png", "235.png", "239.png", "240.png", "241.png", "242.png", "278.png",
"279.png", "283.png", "284.png", "296.png", "297.png", "299.png", "302.png", "318.png", "319.png",
"320.png", "321.png", "324.png", "327.png", "328.png", "329.png", "330.png", "339.png", "340.png",
"349.png", "350.png", "351.png", "359.png", "361.png", "362.png", "369.png", "370.png", "371.png",
"372.png", "373.png", "374.png", "375.png", "376.png", "408.png", "409.png", "410.png", "411.png",
"422.png", "433.png", "425.png", "426.png", "429.png", "430.png", "438.png", "440.png", "443.png",
"444.png", "445.png", "446.png", "447.png", "448.png", "456.png", "457.png", "461.png", "462.png",
"466.png", "467.png", "470.png", "471.png", "474.png", "476.png", "478.png", "506.png", "507.png",
"508.png", "524.png", "525.png", "526.png", "546.png", "547.png", "548.png", "549.png", "551.png",
"552.png", "553.png", "564.png", "565.png", "566.png", "567.png", "568.png", "569.png", "582.png",
"583.png", "584.png", "584.png", "587.png", "594.png", "627.png", "628.png", "629.png", "630.png",
"661.png", "662.png", "663.png", "674.png", "675.png", "700.png", "703.png", "704.png", "705.png",
"706.png", "707.png", "708.png", "709.png", "718.png", "722.png", "723.png", "724.png", "725.png",
"726.png", "727.png", "728.png", "729.png", "730.png", "731.png", "732.png", "733.png", "734.png",
"735.png", "736.png", "737.png", "738.png", "739.png", "740.png", "741.png", "741-p.png",
"741-pau.png", "741-s.png", "742.png", "743.png", "744.png", "745.png", "745-m.png", "746.png",
"746-s.png", "747.png", "748.png", "749.png", "750.png", "751.png", "752.png", "753.png",
"754.png", "755.png", "756.png", "757.png", "758.png", "759.png", "760.png", "761.png", "762.png",
"763.png", "764.png", "765.png", "766.png", "767.png", "768.png", "769.png", "770.png", "771.png",
"772.png", "773.png", "774.png", "775.png", "776.png", "777.png", "778.png", "779.png", "780.png",
"781.png", "782.png", "783.png", "784.png", "785.png", "786.png", "787.png", "788.png", "789.png",
"790.png", "791.png", "792.png", "793.png", "794.png", "795.png", "796.png", "797.png", "798.png",
"799.png", "800.png", "801.png" };
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrameMain frame = new JFrameMain();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public JFrameMain() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblPhoto = new JLabel("");
lblPhoto.setBorder(new LineBorder(new Color(128, 0, 128)));
lblPhoto.setBounds(21, 11, 391, 227);
contentPane.add(lblPhoto);
Timer timer = new Timer(800, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int n = (int) Math.floor(Math.random() * 300);
String image = images[n];
lblPhoto.setIcon(new ImageIcon("src\\images\\" + image));
}
});
timer.start();
}
}
我想知道是否有一种方法来让这个,说当我按下MOUSE1,图像开始滚动,然后说3秒,土地上的后图片。
然后在按下另一个按钮它会重复。
任何帮助,非常感谢。 (正如我所说,从来没有做过任何接近此之前)
答
一般建议:
- 阅读图像一次在程序启动,而不是定时的ActionListener的范围内,并把它们存储在一个集合中,可能是Image或ImageIcon的ArrayList。
- 在定时器的ActionListener中交换ImageIcons,但不要在图像中重新读取不必要的内容。
- 您在构造函数中声明的关键变量太多,因此在类的其他部分不可见(超出范围)。从构造函数中获取Timer的声明和图像显示JLabel,并将它们作为类中的实例字段。
- 在您的JButton的ActionListener中启动计时器,每隔xxx毫秒随机更改一次图像。
- 在同一个定时器的ActionListener中,让它在3秒钟后停止,要么通过重复定时器直到计数达到从3000除以毫秒延迟获得的值,要么使用delta系统时间检查3秒3000毫秒)。
嗨,欢迎来到Stack Overflow。 不要期望其他用户为你编写代码,自己尝试,显示你的努力并发布你的代码。 :) –
@ ema.jar我做到了,它在顶部。 –
你的问题仍然有些模糊。我试图回答它,但只能给出一般性建议。如果您需要进一步帮助,请提出澄清,并显示您尝试过的内容,并告诉我们它是如何工作的。 –