Swing:实现简单GUI功能的问题



我正在尝试构建一个计数器,简单地使用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()方法,从IncrementCountDecrementCount调用它。也可以从构造函数中调用它来初始化文本。

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的研究。

最新更新