我想拥有它,所以当我点击按钮时,时间会更新。如果我想要的话,我能否对我如何实现这一目标有所提示或帮助。
在过去的几天里,我一直在努力做到这一点,所以任何帮助都将不胜感激。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import static javax.swing.BoxLayout.X_AXIS;
import static javax.swing.BoxLayout.Y_AXIS;
public class CountdownNBA2K16 extends JFrame implements ActionListener{
JLabel displayDate ;
JLabel displayDateS ;
JLabel displayDateM ;
JLabel displayDateH ;
JLabel displayDateD ;
JPanel Mili = new JPanel();
JPanel Sec = new JPanel();
JPanel minute = new JPanel();
JPanel hours = new JPanel();
JPanel day = new JPanel();
JPanel cd = new JPanel();
JPanel combine = new JPanel();
JButton button = new JButton("update time");
Calendar releaseDate;
Calendar todayDate;
long diff;
long diffSec;
long days;
long secDays;
long secs;
long min;
long hour;
int SECONDS_IN_A_DAY = 24 * 60 * 60;
String ms;
String s;
String m;
String h;
String d;
public CountdownNBA2K16() {
super("COUNTDOWN TO NBA2K16");//sets title of app
setLayout(new FlowLayout());
button.addActionListener(this);
releaseDate = Calendar.getInstance();
releaseDate.set(Calendar.DAY_OF_MONTH,25);
releaseDate.set(Calendar.MONTH,8);
releaseDate.set(Calendar.YEAR,2015);
todayDate = Calendar.getInstance();
diff = releaseDate.getTimeInMillis() - todayDate.getTimeInMillis();
diffSec = diff/1000;
days = diffSec / SECONDS_IN_A_DAY;
secDays = diffSec % SECONDS_IN_A_DAY;
secs = secDays % 60;
min = (secDays%60) %60;
hour = (secDays/3600);
s = String.valueOf(secs);
displayDateS = new JLabel("seconds:"+s + "");
m = String.valueOf(min);
displayDateM = new JLabel("minutes:"+m +"");
h = String.valueOf(hour);
displayDateH = new JLabel("hours:"+h+"");
d = String.valueOf(days);
displayDateD = new JLabel("days:"+d+"");
Sec.add(displayDateS);
minute.add(displayDateM);
hours.add(displayDateH);
day.add(displayDateD);
cd.add(day);
cd.add(hours);
cd.add(minute);
cd.add(Sec);
cd.setLayout( new BoxLayout(cd ,X_AXIS));
combine.add(button);
combine.add(cd);
combine.setLayout( new BoxLayout(combine ,Y_AXIS));
add(combine);
pack();
setSize(300,300);
setResizable(false);//doesnt let user resize the gui
setLocationRelativeTo(null);//sets location relative to nothing
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//makes the applictaion close when the gui is closed
}
@Override
public void actionPerformed(ActionEvent e) {
displayDateS.getText();
displayDateM.getText();
displayDateH.getText();
displayDateD.getText();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new CountdownNBA2K16().setVisible(true);
}
});
}
}
答案 0 :(得分:1)
首先使用Java 8的Time API或Joda-Time来计算持续时间。
将持续时间计算的逻辑分离为单独的方法,这样您就可以从构造函数和actionPerformed
方法中调用它。
像...一样的东西。
protected void updateDuration() {
System.out.println(LocalDateTime.now());
Duration d = Duration.between(releaseDate.atStartOfDay(), LocalDateTime.now());
System.out.println(d.toMillis());
long days = d.toDays();
d = d.minusDays(days);
long hours = d.toHours();
d = d.minusHours(hours);
long mins = d.toMinutes();
d = d.minusMinutes(mins);
long seconds = d.toMillis() / 1000;
displayDateS.setText("Seconds: " + seconds);
displayDateM.setText("Minutes: " + mins);
displayDateH.setText("Hours: " + hours);
displayDateD.setText("Days: " + days);
}
例如(只需确保在调用之前已经创建了标签)
您可能还想查看How to use Swing Timers以自动更新输出。
答案 1 :(得分:0)
打个比方。 因为我仍然无法发表评论,这就是我回答你的原因。 在actionPerformed方法中,只需将标签文本设置为您想要的内容。
public class CountdownNBA2K16 extends JFrame implements ActionListener {
JLabel displayTime;
JButton button = new JButton("Update time");
public CountdownNBA2K16() {
super("Time");
setLayout(new FlowLayout());
button.addActionListener(this);
displayTime = new JLabel("Just to see the updates ..." + System.currentTimeMillis());
setSize(300, 300);
add(displayTime);
add(button);
pack();
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
displayTime.setText("Just to see the updates ..." + System.currentTimeMillis());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new CountdownNBA2K16().setVisible(true);
}
});
}
}