[英]Given this Java code sample, do I have a rudimentary understanding of inner classes?
我正在設計一個倒數計時器, 在這里找到了一個。 這很有效...您輸入秒數,它會自動為您倒數。 我修改代碼以偵聽單選按鈕的選擇以設置開始時間。 當點擊“開始”按鈕時,倒數開始。 我已經解決了布局問題,但是在將ButtonListener放入下面的代碼時遇到了麻煩。
我只是開始使用嵌套類,所以某些概念對我來說有點模糊。 在下面,如果我理解正確,則ActionEvent
是倒數計時,位於ActionListener
類內部,該類捕獲按鈕的單擊。 倒數取決於並且不能獨立於按鈕單擊而運行,並且Listener
類中的所有變量ALSO也可用於Event
類。
所以我在想,如果我想為單選按鈕添加一個Listener
和Event
,則這些Listener
將封裝Action
,該封裝以下代碼。 我已經在類聲明中標記了我認為應該去的地方,但沒有在結尾處注明。 我需要做一些更仔細的分析,以確定它們是如何工作的。 那是做事的正確方法嗎? 或者,還有更好的方法? 如果我在radiobuttion event
中將startTime變量聲明為public,那么它應該繼續執行其他嵌套類,對嗎?
我是否正確理解所有這些內容? 還是我缺少一些要點。 這是我關於內部類的第一個項目,請保持溫柔。 :)
public Test() {
super("Countdown timer");
final String startTime = "10"
text = new JTextField(startTime, 18);
start = new JButton("Start");
pr = new JRadioButton("30");
sr = new JRadioButton("15");
lr = new JRadioButton("5");
JPanel radioPanel = new JPanel(new GridLayout(0, 1));
radioPanel.add(pr);
radioPanel.add(sr);
radioPanel.add(lr);
//new button action listener here {
// new button action event here {
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent click) {
final long current = System.currentTimeMillis();
try {
final long limit = Integer.parseInt(text.getText().trim())* 1000; // X seconds
timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent event) {
long time = System.currentTimeMillis();
long passed = time - current;
long remaining = limit - passed;
if(remaining <= 0) {
text.setText(startTime);
timer.stop();
} else {
long seconds = remaining/1000;
long minutes = seconds/60;
long hours = minutes/60;
text.setText(String.format("%02d:%02d:%02d remaining", hours, minutes, seconds%60));
}
}
});
timer.start();
} catch(NumberFormatException nfe) {
// debug/report here
nfe.printStackTrace();
}
}});
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(radioPanel);
panel.add(text);
panel.add(start, BorderLayout.CENTER );
add(panel);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.