Java 如何根据时间进行一次JLabel更改
我已经研究了两天如何使用swing定时器了,我想知道如何改变我JFrame中心的图像。到目前为止,我的程序运行正常,但图像并没有改变我想要的方式。这个类只是用作测试,所以它可能没有正确的java语法Java 如何根据时间进行一次JLabel更改,java,timer,jlabel,Java,Timer,Jlabel,我已经研究了两天如何使用swing定时器了,我想知道如何改变我JFrame中心的图像。到目前为止,我的程序运行正常,但图像并没有改变我想要的方式。这个类只是用作测试,所以它可能没有正确的java语法 package hauntedHouseAdventure; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
package hauntedHouseAdventure;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class timertest {
static JFrame sceneOne = new JFrame();
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ImageIcon image = new ImageIcon(
"/Users/computerscience2/Desktop/dark-forest-night-image.jpg");
JLabel imageLabel = new JLabel("", image, JLabel.CENTER);
JPanel panel = new JPanel(new BorderLayout());
panel.add(imageLabel, BorderLayout.NORTH);
sceneOne.add(panel);
sceneOne.setResizable(false);
imageLabel.setVisible(true);
sceneOne.pack();
JButton leave=new JButton("Leave");
JButton stay= new JButton ("Stay");
leave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
//Execute when button is pressed
sceneOne.setVisible(false);
}
});
stay.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent f)
{
//Execute when button is pressed
sceneOne.setVisible(false);
}
});
panel.add(leave, BorderLayout.EAST);
panel.add(stay, BorderLayout.WEST);
JLabel label1 = new JLabel("Test");
label1.setText("<html><font color='red'> It was approximately 11:30 pm. The night sky was black not a single star piercing through the darkness"
+ "except the thick and powerful moonlight."
+ "<br>"
+ "You are alone leaving a costume party at a friend's place."
+ "It was rather boring and you decided to leave early."
+ "A stutter is heard and your"
+ "<br>"
+ "car begins to shake"
+ "Your headlights and car lights crack. The engine is left dead silent."
+ "You are left in a total silence"
+ "and baked in merely the moonlight."
+ "<br>"
+ "There is a mere second of silence till a harsh chill ripes through the"
+ "car like a bullet through paper. You are left dumbfounded. What do you do?</font><html>");
label1.setHorizontalAlignment(JLabel.CENTER);
label1.setVerticalAlignment(JLabel.BOTTOM);
label1.setVisible(true);
label1.setOpaque(false);
panel.add(label1);
final ActionListener updater = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
ImageIcon image = new ImageIcon(
"/Users/computerscience2/Desktop/image-slider-5.jpg");
JLabel imageLabel = new JLabel("", image, JLabel.CENTER);
JPanel panel = new JPanel(new BorderLayout());
panel.add(imageLabel, BorderLayout.NORTH);
sceneOne.add(panel);
}
};
Timer timer = new Timer(1000, updater);
timer.start();
sceneOne.setSize(2000,1000);
sceneOne.setTitle("The Car");
sceneOne.setVisible(true);
sceneOne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sceneOne.setLocation(250, 200);
}
包鬼屋探险;
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.IOException;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类时间测试{
静态JFrame sceneOne=新JFrame();
公共静态void main(字符串[]args)引发IOException{
//TODO自动生成的方法存根
ImageIcon image=新的ImageIcon(
“/Users/computerscience2/Desktop/dark forest night image.jpg”);
JLabel imageLabel=新的JLabel(“”,图像,JLabel.CENTER);
JPanel panel=newjpanel(newborderlayout());
面板。添加(图像标签,边框布局。北);
sceneOne.add(面板);
sceneOne.SetResizeable(假);
imageLabel.setVisible(true);
sceneOne.pack();
JButton leave=新JButton(“leave”);
JButton stay=新JButton(“stay”);
leave.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
//按下按钮时执行
sceneOne.setVisible(假);
}
});
stay.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件f)
{
//按下按钮时执行
sceneOne.setVisible(假);
}
});
面板。添加(左,边界布局。东);
面板。添加(停留,边界布局。西部);
JLabel label1=新的JLabel(“测试”);
label1.setText(“当时大约是晚上11:30,夜空是黑色的,没有一颗星星穿过黑暗。”
+“除了浓浓的月光。”
+“
”
+“你独自一人在朋友家参加化装舞会。”
+“太无聊了,你决定早点走。”
+“听到口吃声,你的声音”
+“
”
+“汽车开始摇晃”
+“你的车头灯和车灯都裂了。发动机完全没有声音。”
+“你完全沉默不语”
+“只在月光下烤。”
+“
”
+“只有一秒钟的沉默,直到刺骨的寒意划破整个房间”
+“汽车就像一颗子弹穿过纸张。你目瞪口呆。你怎么办?”;
标签1.设置水平对齐(JLabel.中心);
标签1.设置垂直对齐(标签底部);
label1.setVisible(真);
标签1.设置不透明(假);
面板。添加(标签1);
最终ActionListener更新程序=新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件){
ImageIcon image=新的ImageIcon(
“/Users/computerscience2/Desktop/image-slider-5.jpg”);
JLabel imageLabel=新的JLabel(“”,图像,JLabel.CENTER);
JPanel panel=newjpanel(newborderlayout());
面板。添加(图像标签,边框布局。北);
sceneOne.add(面板);
}
};
定时器=新定时器(1000,更新程序);
timer.start();
场景设置大小(20001000);
sceneOne.setTitle(“汽车”);
sceneOne.setVisible(真);
sceneOne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
场景设置位置(250200);
}
}我没有详细查看,但要更改标签上的图像,则无需创建新控件,只需更改现有控件上的图像即可
public void actionPerformed(ActionEvent event) {
ImageIcon image = new ImageIcon(
"/Users/computerscience2/Desktop/image-slider-5.jpg");
imageLabel.setIcon(image);
}
您还需要将imageLabel设置为成员变量或final,以便
actionPerformed
方法可以看到它。我在代码中看到两个问题
final JLabel imageLabel = new JLabel("", image, JLabel.CENTER);
......
final ActionListener updater = new ActionListener() {
public void actionPerformed(ActionEvent e) {
ImageIcon image = new ImageIcon("/Users/computerscience2/Desktop/image-slider-5.jpg");
imageLabel.setIcon(image);
imageLabel.updateUI(); //Tell to your frame he needs to redraw the image
}
};
您仍然没有遵循Java命名约定<代码>变量名称不应以大写字符开头。自上次提醒此主题以来,您有两周的时间来修复代码:
该类只是用作测试,因此它可能没有正确的java语法
——即使对于测试类,也绝对没有理由不遵循标准。Namining约定应该是自然的,您使用它们的次数越多,它们就越自然<代码>如果您想让我们阅读您的代码,然后按照约定进行操作,就这么简单。camickr,我理解您的沮丧,但我陷入了困境。我实际上已经采纳了上一个程序中的命名建议。然而,我无法使用它,因为我的主计算机上的eclipse出现故障。我确实有旧版本并复制粘贴了它。使用定时计算机,我不希望通过整个程序来修复它。事实上,我已经重新安装了eclipse和我的JRE,并将立即修复这个问题的语法。我的道歉和建议是正确的。