我正在尝试构建一个使用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();
}
});
}
}
答案 0 :(得分:2)
每当您更改计数时,都必须更新标签 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();
}
});
}
}
答案 1 :(得分:0)
您的代码中存在两个问题。首先,您从未真正更新标签。这不是单独完成的,必须在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的研究。