Я работаю над созданием программы, использующей 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