Swing:让我的简单GUI功能出现问题

时间:2014-05-11 13:45:05

标签: java swing

我正在尝试构建一个使用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();

            }
        });

    }
}

2 个答案:

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