Java动作监听器 - 相同的循环,不同的结果

时间:2018-03-20 18:46:36

标签: java

对于一个不太具体的标题提前抱歉 - 问题很难描述。我必须有一个非常简单的程序,一个带有X的窗口,一个告诉所述X中字体大小的数字,以及两个按钮 - 单击的增加和减少应该将字体大小和数字改为1。它们位于实现ActionListener

的类中

这不是actionPerformed。 if else是Ctrl + C,Ctrl + V,唯一改变的是++和 - 。问题是程序一旦运行有一个正确工作的减少按钮(减少1)但增加导致值和字体增加2。

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == increase) {
        size.setText(++value+"");
        setFont(value);
    }
    else if (e.getSource() == decrease) {
        size.setText(--value+"");
        setFont(value);
    }
}

在盯着我的代码并尝试不同的编写方式 - 在单独的行中改变价值等等之后,我仍然无法理解为什么会发生这种情况。下面是整个程序(非常简短,正如我所说它应该是对JFrame及其组件的简单练习):

class FontDisplay extends JFrame implements ActionListener{

JLabel size, letter;
JButton increase, decrease;
int value; //to get rid of converting from strings to ints when changing size

public FontDisplay() {
    value = 18;
    setLayout(new GridLayout(2,2));
    size = new JLabel("18");
    letter = new JLabel("X", JLabel.RIGHT);
    setFont(18);
    increase = new JButton("Increase");
    increase.addActionListener(this);
    decrease = new JButton("Decrease");
    decrease.addActionListener(this);

    add(letter);
    add(size);
    add(increase);
    add(decrease);
    increase.addActionListener(this);
}


public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == increase) {
        size.setText(++value+"");
        setFont(value);

    }
    else if (e.getSource() == decrease) {
        value--;
        size.setText(value+"");
        setFont(value);
    }
}

private void setFont(int i) {
    Font font = new Font(letter.getFont().getFontName(), Font.PLAIN,i);
    letter.setFont(font);
}


public static void main(String[] args){
    FontDisplay t = new FontDisplay();
    t.setSize(200, 200);
    t.setTitle("Check Font Size");
    t.setVisible(true);
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

0 个答案:

没有答案