【问题标题】:Having trouble changing a variable with ActionListener使用 ActionListener 更改变量时遇到问题
【发布时间】:2016-06-23 16:16:00
【问题描述】:

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

逾越节代码:

    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,但我不知道该怎么做。也许有完全不同的方法可以做到这一点?

这是我第一次在这里发帖,如果我的帖子有任何错误,请见谅。

【问题讨论】:

标签: java swing


【解决方案1】:

您不能通过“==”比较两个对象。请改用 .equals(Object)。

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

【讨论】:

    【解决方案2】:

    getter 和 setter 将是与您的私有 int 逾越节相同的类中的公共方法。 get 方法只是一个返回私有 int 值的单行方法。喜欢

    public static int getPassover(){
        return passover;
    }
    

    它之所以有效,是因为它与逾越节属于同一类,因此可以访问它。

    setter 直接设置值:

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

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

    对于你的方法,如果你想用 get set 方法来做,你可以像这样递增它

    setPassover(getPassover() + 1);
    

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

    【讨论】:

    • 我认为使用 setter 和 getter 是有道理的。我仍然感到困惑的一件事是我将如何制作它以便程序更新逾越节,以便根据我对按钮的操作而不是显示 1997 来显示另一个数字。我做的方式是正确的,我只是错过了一些东西,还是我做的完全错了?我以前从未做过 ActionListener。
    【解决方案3】:

    您必须在逾越节值更改后将新的passover 值设置为处理程序代码中的passoverLabel。否则您无法在标签上看到新值。

    passoverLabel.setText(Integer.toString(passover))
    

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2019-01-25
      相关资源
      最近更新 更多