我正在构建一个使用JFrame的程序。我最终想要的结果是实现一个ActionListener,当用户单击一个按钮时它将删除标签。例如:当用户点击JButton时,5个标签中的一个从框架中移除。当他们再次点击该按钮时,其余的4个标签中的一个被删除...等等,直到剩下0个标签。从技术上讲,我有程序按要求工作,但是,我试图看看是否有方法通过循环实现ActionListener事件,而不是为每个单独的标签列出if语句。非常感谢!JFrame - ActionListener
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
//calls for public class to inherit features of JFrame within Java
public class NoPurchaseReason extends JFrame implements ActionListener {
private int removeText = 0;
JButton btn = new JButton("Select");
JLabel lbl = new JLabel("Found better price");
JLabel lbl1 = new JLabel("Not as shown on website");
JLabel lbl2 = new JLabel("Wrong product");
JLabel lbl3 = new JLabel("Damaged upon delivery");
JLabel lbl4 = new JLabel("None of the above");
public static void main(String[] args) {
JFrame f = new NoPurchaseReason("Please tell us why you wish to return your purchase.");
f.setBounds(300, 100, 500, 500);
f.setVisible(true);
f.setBackground(Color.blue);
}
public NoPurchaseReason(String title) {
super(title);
setLayout(null);
lbl.setBounds(40, 40, 600, 40);
btn.setBounds(320, 10, 80, 20);
lbl.setBounds(100, 40, 100, 20);
lbl1.setBounds(100, 70, 100, 20);
lbl2.setBounds(100, 100, 150, 20);
lbl3.setBounds(100, 130, 100, 20);
lbl4.setBounds(100, 160, 100, 20);
add(btn);
add(lbl);
add(lbl);
add(lbl1);
add(lbl2);
add(lbl3);
add(lbl4);
btn.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
removeText++;
if (removeText == 1) {
lbl.setVisible(false);
lbl1.setBounds(100, 40, 100, 20);
lbl2.setBounds(100, 70, 100, 20);
lbl3.setBounds(100, 100, 150, 20);
lbl4.setBounds(100, 130, 100, 20);
}
if (removeText == 2) {
lbl1.setVisible(false);
lbl2.setBounds(100, 40, 100, 20);
lbl3.setBounds(100, 70, 150, 20);
lbl4.setBounds(100, 100, 100, 20);
}
if (removeText == 3) {
lbl2.setVisible(false);
lbl3.setBounds(100, 40, 150, 20);
lbl4.setBounds(100, 70, 100, 20);
}
if (removeText == 4) {
lbl3.setVisible(false);
lbl4.setBounds(100, 40, 100, 20);
}
if (removeText == 5) {
lbl4.setVisible(false);
}
}
}
非常感谢你们的例子!这比我的代码更加简洁。我似乎遇到的唯一麻烦是当我尝试实现您提供的第一个示例时,我继续得到以下错误:标记“setLayout”上的语法错误,=在此标记后预期----不确定为什么这是怎么回事? – user2825293
这些示例需要直接粘贴到方法内部,而不是类(我在主要方法中很快写入它们)。只有声明可以存在于方法之外,在这种情况下,错误发生在'setLayout'上,因为它不是一个声明,而是一个方法调用,因此它必须进入某种方法。我在编写代码时并没有真正将你的代码作为基础,所以这不是“面向对象”的全部 - 对此感到遗憾。为了说明我在说什么,我在第一个示例中添加了额外的代码。 – sgbj
非常完美!出于某种原因,我以为我将setLayout放在我的方法中,但显然我不是。我非常感谢你的帮助。 :) – user2825293