使用ActionListener更改变量时遇到问题

时间:2016-06-22 16:28:55

标签: java swing

我正在使用GUI并且我正确显示所有内容但是当我按下按钮时我无法更改变量的值。该变量称为passover,它是一个私有int,在0参数构造函数中初始化为1997的值,我有3个按钮,需要在按下时更改逾越节的值。

逾越节守则:

    panel.setBorder(
    BorderFactory.createEmptyBorder(0, 0, 0, 0));
    panel.setLayout(new BorderLayout(0, 0));

    JPanel topPanel = getPanel();
    topPanel.setLayout(new GridBagLayout());
    topPanel.setBackground(new Color(173, 216, 230));
    JLabel moveLabel = getLabel("Move Data");
    moveLabel.setFont(new Font("Serif", Font.PLAIN, 20));
    addComp(topPanel, moveLabel, 0, 0, 1, 1, 0.5, 0.2,
            GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTHEAST);
    JLabel passoverLabel = getLabel("       Passover : " + passover);
    passoverLabel.setFont(new Font("Serif", Font.PLAIN, 20));
    addComp(topPanel, passoverLabel, 1, 0, 1, 1, 0.5, 0.2,
            GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER);

按钮代码:

    JPanel bottomRightPanel = getPanel();
    bottomRightPanel.setBorder(
               BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
    bottomRightPanel.setLayout(new GridBagLayout());
    bottomRightPanel.setBackground(new Color(255, 105, 180));
    JPanel passoverButtonPanel = getPanel();
    passoverButtonPanel.setBackground(new Color(255, 105, 180));
    passoverButtonPanel.setLayout(new BoxLayout(passoverButtonPanel, BoxLayout.Y_AXIS));
    nextPassoverButton = new JButton("Next Passover");
    goToPassoverButton = new JButton("Go To Passover: ");
    previousPassoverButton = new JButton("Previous Passover");
    JLabel filler = getLabel(" ");
    goToField = new JTextField(6);
    goToField.setPreferredSize(new Dimension(5, 30));


    theHandler handler = new theHandler();
    nextPassoverButton.addActionListener(handler);
    goToPassoverButton.addActionListener(handler);
    previousPassoverButton.addActionListener(handler);
    goToField.addActionListener(handler);

我想要在按下nextPassoverButton时将逾越节的值提高一个,在按下previousPassoverButton时降低一个逾越节值,并在按下goToPassoverButton时更改为用户输入goToField的值。

我的ActionListener类看起来像:

    public class theHandler extends MyDataPalV2 implements ActionListener{

    public void actionPerformed(ActionEvent event)
    {


        if (event.getSource() == goToField)
        {
            this.passover = Integer.parseInt(String.format("%s", event.getActionCommand()));
        }

        if (event.getSource() == nextPassoverButton)
        {
            this.passover++;
        }

        if (event.getSource() == previousPassoverButton)
        {
            this.passover--;
        }
    }
}

错误是私有访问错误,所以我想我需要使用getter和setter,但我不知道我会怎么做。也许有完全不同的方法来做到这一点?

这是我第一次在这里发帖,很抱歉,如果我在帖子中犯了任何错误。

3 个答案:

答案 0 :(得分:1)

您无法通过'=='比较两个对象。改为使用.equals(Object)。

if(event.getSource().equals(goToField))

答案 1 :(得分:1)

getter和setter将是与私有int逾越法相同的类中的公共方法。 get方法只是一行mehtod,它返回私有int的值。像

public static int getPassover(){
    return passover;
}

它起作用,因为它与逾越节属于同一类,因此可以访问它。

直接设置器设置值:

public static void setPassover(int num){
    passover = num;
}

如果您使用线程,请注意这一点。

对于您的方法,如果您想使用get set方法,可以像

一样增加它
setPassover(getPassover() + 1);

如果逾越不是类变量,您将从方法标题中取出'static'。这有意义吗?

答案 2 :(得分:0)

在逾越值更改后,必须在处理程序代码中将新passover值设置为passoverLabel。另外,你看不到标签上的新价值。

passoverLabel.setText(Integer.toString(passover))