#java #arrays #swing #actionlistener #jlabel
Вопрос:
Я использую JFrame
реализацию ActionListener
. Моя цель состоит в том , чтобы каждый раз, когда пользователь нажимает на JButton
, я должен удалять и заменять кавычки следующей цитатой (за запятую). Последняя цитата затем вернется к первой цитате. Цитата будет отображаться при каждом нажатии на кнопку. Я застрял на том, как я могу это сделать под actionPerformed
.
Это то, что у меня есть до сих пор:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame implements ActionListener {
FlowLayout flow = new FlowLayout();
JButton b = new JButton("Press to change fact");
JLabel fact = new JLabel();
String[] quotes = new String[]{"Quote1 Goes Here",
"Quote2 Goes Here",
"Quote3 Goes Here",
"Quote 4 Goes Here",
"Quote 5 Goes Here",
"Quote 6 Goes Here",
};
int counter = 0;
int MAX = 6;
public JFacts() {
super("RANDOM QUOTES");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(flow);
add(b);
// STRING QUOTES WILL DISPLAY HERE
b.addActionListener(this);
}
public static void main(String[] args) {
JFacts rFrame = new JFacts();
rFrame.setSize(440, 100);
rFrame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
counter ;
if(counter == MAX) {
counter = 0;
}
}
}
Комментарии:
1. Вам действительно нужно немного больше поработать здесь. Вы даже не настроили JFrame должным образом. Сначала попробуйте отобразить JLabel, после этого вы будете в лучшем месте для изменения текста.
2. @markspace К сожалению, мне приходится использовать JFrame как часть приглашения на задание, которое я пытаюсь сделать для этого.
Ответ №1:
В принципе, этого можно достичь с помощью этой логики условий if
if (counter >= quotes.length) {
counter = 0;
}
Мы увеличиваем индекс при каждом нажатии кнопки и отображаем элементы массива до counter >= quotes.length
тех пор, пока счетчик не вернется к 0, чтобы он мог начаться снова
Код
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(quotes[counter ]);
//or
fact.setText(quotes[counter ]);
if (counter >= quotes.length) {
counter = 0;
}
}
});
}
Полный код
public class Main extends JFrame implements ActionListener {
FlowLayout flow = new FlowLayout();
JButton b = new JButton("Press to change fact");
JLabel fact = new JLabel();
String[] quotes = new String[]{"Quote1 Goes Here",
"Quote2 Goes Here",
"Quote3 Goes Here",
"Quote 4 Goes Here",
"Quote 5 Goes Here",
"Quote 6 Goes Here",
};
int counter = 0;
int MAX = 6;
public Main() {
super("RANDOM QUOTES");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(flow);
add(b);
add(fact);
fact.setText(quotes[0]);
// STRING QUOTES WILL DISPLAY HERE
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fact.setText(quotes[counter ]);
// System.out.println(quotes[counter ]);
if (counter >= quotes.length) {
counter = 0;
}
}
});
}
public static void main(String[] args) {
Main rFrame = new Main();
rFrame.setSize(440, 100);
rFrame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
Просто output
проверить, работает ли программа, вы можете протестировать ее на своем JLabel fact
Quote1 Goes Here
Quote2 Goes Here
Quote3 Goes Here
Quote 4 Goes Here
Quote 5 Goes Here
Quote 6 Goes Here
Quote1 Goes Here
Quote2 Goes Here
Quote3 Goes Here
Quote 4 Goes Here