我正在尝试构建一个计数器,简单地使用GUI增加或减少整数。谁能告诉我哪里做错了吗?我的按钮只是不增加或减少0的起始整数值。
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import org.omg.CORBA.TCKind;
public class MainFrame extends JFrame {
// Field Variables
private int counter;
private int currentNumber = 0;
// Methods
public void setCounter(int counter){
currentNumber = counter;
}
public int getCounter(){
return currentNumber;
}
public void IncrementCounter() {
currentNumber++;
}
public void DecrementCounter() {
currentNumber = 222;
}
public MainFrame(String title) {
super(title);
// SetLayout
setLayout(new GridLayout(2, 2));
// Add Swing components
final JTextField tCounter = new JTextField();
tCounter.setEditable(false);
tCounter.setText(currentNumber + "");
JTextField label = new JTextField();
label.setText("The Count: ");
label.setEditable(false);
JButton btn1 = new JButton("up");
JButton btn2 = new JButton("down");
// Add components to content pane
getContentPane().add(btn1);
getContentPane().add(btn2);
getContentPane().add(label);
getContentPane().add(tCounter);
// Add btn1 ad btn2 behaviour.
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
IncrementCounter();
}
});
// Add btn2 Behaviour
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DecrementCounter();
}
});
}
}
无论何时更改计数,都必须更新标签tCounter。为此,将tCounter变量转换为一个字段,添加updateLabel()方法,从IncrementCount和DecrementCount调用它。也可以从构造函数中调用它来初始化文本。
JTextField tCounter=new JTextField();
void updateLabel(){
tCounter.setText(currentNumber+"");
}
public void IncrementCounter() {
currentNumber++;
updateLabel()
}
...
更新代码:
package foo;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class MainFrame extends JFrame {
// Field Variables
private int counter;
private int currentNumber = 0;
// Methods
public void setCounter(int counter) {
currentNumber = counter;
}
public int getCounter() {
return currentNumber;
}
public void IncrementCounter() {
currentNumber++;
updateLabel();
}
void updateLabel() {
tCounter.setText(currentNumber + "");
}
public void DecrementCounter() {
currentNumber = 222;
updateLabel();
}
public static void main(String... args) {
MainFrame frame = new MainFrame("Foo");
frame.pack();
frame.setVisible(true);
}
final JTextField tCounter = new JTextField();
public MainFrame(String title) {
super(title);
// SetLayout
setLayout(new GridLayout(2, 2));
// Add Swing components
tCounter.setEditable(false);
updateLabel();
JTextField label = new JTextField();
label.setText("The Count: ");
label.setEditable(false);
JButton btn1 = new JButton("up");
JButton btn2 = new JButton("down");
// Add components to content pane
getContentPane().add(btn1);
getContentPane().add(btn2);
getContentPane().add(label);
getContentPane().add(tCounter);
// Add btn1 ad btn2 behaviour.
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
IncrementCounter();
}
});
// Add btn2 Behaviour
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DecrementCounter();
}
});
}
}
您的代码中有两个问题。首先,您从未真正更新标签。这不是自己完成的,必须在actionPerformed()
方法中完成。第二,您必须在希望更新的任何组件上使用repaint()
方法。这是你的actionPerformed()
方法的一个版本,在你的程序中工作。
// Add btn1 ad btn2 behaviour.
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
IncrementCounter();
tCounter.setText(currentNumber + "");
tCounter.repaint();
}
});
// Add btn2 Behaviour
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DecrementCounter();
tCounter.setText(currentNumber + "");
tCounter.repaint();
}
});
我建议你做一点关于在Java中更新swing的研究。