【问题标题】:Adding a new button after an event在事件之后添加新按钮
【发布时间】:2019-05-12 04:25:15
【问题描述】:

编写程序以在按下 +1 按钮时递增计数器,然后当计数器达到某个数字时,移除 +1 按钮并用 +2 按钮替换它,依此类推。我首先创建了两个按钮,但只是将 btnCount1 设置为 setVisible(false)。当某个数字通过时,我使 btnCount 不可见并且 btnCount1 可见,并从那里增加 2。当达到 10 次点击时,btnCount 消失,但 btnCount1 不出现。

我尝试过创建一个 if(arg0.equals(btnCount1)),然后从那里增加 2。我尝试将 add(btnCount1) 放在 else if 语句中,以便在 elseif 条件为真后创建它。

public class AWTCounter extends Frame implements ActionListener
private Label lblCount;
private TextField tfCount;
private Button btnCount;
private Button btnCount1;
private int count = 0;

public AWTCounter() {
    setLayout(new FlowLayout());


    lblCount = new Label("Counter");
    add(lblCount);

    tfCount = new TextField(count + "",10);
    tfCount.setEditable(false);
    add(tfCount);

    btnCount = new Button("Add 1");
    btnCount1 = new Button("Add 2");
    add(btnCount);
    add(btnCount1);
    btnCount1.setVisible(false);

    btnCount.addActionListener(this);
    btnCount1.addActionListener(this);


    setTitle("AWT Counter");
    setSize(500,500);

}

public static void main(String[]args) {
    AWTCounter app = new AWTCounter();
}
public void actionPerformed(ActionEvent arg0) {
    if(count <= 10) {
        ++count; //Increase the counter value
        tfCount.setText(count + "");
    }else if(count > 10) {
        btnCount.setVisible(false);
        btnCount1.setVisible(true);
        count += 2;
        tfCount.setText(count + "");
    }
}

【问题讨论】:

  • 为什么要使用 AWT?请参阅 this answer 了解放弃 AWT 组件以支持 Swing 的许多充分理由。

标签: java awt


【解决方案1】:

这里更好的解决方案是只有一个按钮对象和一个用于当前增量的单独变量。当您达到所需的计数时,将增量数量和change the button's label 增加到新值。

您还可以在这里做得更好。

  • 如果您不在整数之前或之后添加单词,请使用String.valueOf() 而不是int + "" 来表示整数的String
  • 不要为代码添加明显的 cmets。 (例如'增量变量x''将textString设置为新值'
  • 为方法参数和变量使用描述性名称。
  • 对于不需要像计数器显示那样可编辑或可选择的文本,请使用 Labels 而不是 TextFields

我个人也会将lblCount 的名称更改为lblTitle,因为将tfCount 更改为Label 在逻辑上会占用该名称,而lblTitle 更有意义。

这是实现actionPerformed的更好方法:

private int increment = 1;
private Label lblCount;
...
public void actionPerformed(ActionEvent ignore) {
    if(count == 10) {
        btnCount.setLabel("Add " + (++increment));
    }

    lblCount.setText(String.valueOf(count += increment));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多