[英]Setting JLabel text to be random string from an ArrayList
我试图让我的 JLabel 的文本成为我在单独的类中创建的 ArrayList 中随机选择的问题(或字符串)。
我已经尝试过另一个用户提到的这段代码,但它说它无法解决 MUSquestions
Question = new JLabel();
getContentPane().add(Question);
Question.setText(MUSquestions.get(Math.random()*MUSquestions.size()));
Question.setBounds(38, 61, 383, 29);
ArrayList代码如下
import java.util.*;
public class Questions {
public static void main(String[] args) {
ArrayList<String> SPOquestions = new ArrayList<String>(); // adding the sports questions for the quiz
SPOquestions.add("Who won the 2005 Formula One World Championship?");
SPOquestions.add("Which team has the most Formula One Constructors titles?");
SPOquestions.add("In what year did Roger Federer win his first 'Grand Slam'?");
SPOquestions.add("How many 'Grand Slams' has Rafael Nadal won?");
SPOquestions.add("Who has scored the most amount of goals in the Premier League?");
SPOquestions.add("Who has won the most World Cups in football?");
SPOquestions.add("How many MotoGP titles does Valentino Rossi hold?");
SPOquestions.add("Who was the 2013 MotoGP champion?");
SPOquestions.add("Who won the 2003 Rugby World Cup?");
SPOquestions.add("In rugby league, how many points are awarded for a try?");
SPOquestions.add("Who is the youngest ever snooker World Champion?");
SPOquestions.add("In snooker, what is the highest maximum possible break?");
SPOquestions.add("How many majors has Tiger Woods won?");
SPOquestions.add("In golf, what is the tournament between the USA and Europe called?");
SPOquestions.add("How many World Championships has darts player Phil Taylor won?");
SPOquestions.add("What is the maximum possible amount of points a player can earn from throwing three darts?");
SPOquestions.add("How many gold medals did Michael Phelps win at the 2008 Beijing Olympics?");
SPOquestions.add("Who won the 2012 Olympic 100 metres mens race?");
SPOquestions.add("Which of these events are not a part of the heptathlon?");
SPOquestions.add("When was the first modern Olympics held?");
ArrayList<String> MUSquestions = new ArrayList<String>(); // adding the music questions
MUSquestions.add("'Slash' was a member of which US rock band?");
MUSquestions.add("Brian May was a member of which English rock band?");
MUSquestions.add("What is the name of the music festival held annually in the town of Boom, Belgium?");
MUSquestions.add("The rapper Tupac Shakuer '2Pac' died in which year?");
MUSquestions.add("Which of these bands headlined the 2013 Glastonbury music festival?");
MUSquestions.add("Which of these people designed the 'Les Paul' series of guitars?");
MUSquestions.add("Keith Moon was a drummer for which English rock band?");
MUSquestions.add("Kanye West has a total of how many Grammy awards?");
MUSquestions.add("Beyonce Knowles was formally a member of which US group?");
MUSquestions.add("In which US city was rapper 'Biggie Smalls' born?");
MUSquestions.add("Michael Jackson's first number one single in the UK as a solo artist was what?");
MUSquestions.add("The best selling album of all time in the UK is what?");
MUSquestions.add("The best selling album of all time in the US is what?");
MUSquestions.add("What is the artist known as 'Tiesto's real name?");
MUSquestions.add("Which of these was not a member of The Beatles?");
ArrayList<String> GENquestions = new ArrayList<String>(); // adding general knowledge questions
GENquestions.add("Who was the second President of the United States?");
GENquestions.add("The youngest son of Bob Marley was who?");
GENquestions.add("In the film '8 Mile', the character portrayed by Eminem is known as what?");
GENquestions.add("What is the capital city of New Zealand?");
GENquestions.add("What is the capital city of Australia?");
GENquestions.add("How many millilitres are there in an English pint?");
GENquestions.add("What was the biggest selling game for the PS2 worldwide?");
GENquestions.add("What is the last letter of the Greek alphabet?");
GENquestions.add("Who created the television series Futurama?");
GENquestions.add("A word which reads the same backwards as it does forwards is known as a what?");
GENquestions.add("A 'baker's dozen' consists of how many items?");
GENquestions.add("World War 1 officially occured on which date?");
GENquestions.add("'Trouble and strife' is cockney rhyming slang for what?");
GENquestions.add("Who was the last Prime Minister to hail from the labour party in the UK?");
GENquestions.add("WalMart is the parent company of which UK based supermarket chain?");
}
}
你有一个参考问题...
在你的main
方法中,你声明了三个局部变量;
public static void main(String[] args) {
ArrayList<String> SPOquestions = new ArrayList<String>(); // adding the sports questions for the quiz
//...
ArrayList<String> MUSquestions = new ArrayList<String>(); // adding the music questions
//...
ArrayList<String> GENquestions = new ArrayList<String>(); // adding general knowledge questions
//...
}
这意味着不能从main
以外的任何其他上下文引用此变量。 “简单”的解决方案可能是使它们成为Questions
类的static
类变量。 虽然这会起作用,但这会产生问题并代表一个更大的长期问题, static
不是允许访问变量的答案,而是代表一个设计问题。
相反,将变量移动到需要使用它们的类中并将它们创建为实例变量,以便它们对于类的每个实例都是唯一的...
public class QuestionPane extends JPanel {
private ArrayList<String> SPOquestions = new ArrayList<String>(); // adding the sports questions for the quiz
private ArrayList<String> MUSquestions = new ArrayList<String>(); // adding the music questions
private ArrayList<String> GENquestions = new ArrayList<String>(); // adding general knowledge questions
通过这种方式, QuestionPane
可以从其上下文中访问每个变量(在QuestionPane
声明的任何方法)
例如...
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class RandomStuff {
public static void main(String[] args) {
new RandomStuff();
}
public RandomStuff() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new QuestionPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class QuestionPane extends JPanel {
private ArrayList<String> SPOquestions = new ArrayList<String>(); // adding the sports questions for the quiz
private ArrayList<String> MUSquestions = new ArrayList<String>(); // adding the music questions
private ArrayList<String> GENquestions = new ArrayList<String>(); // adding general knowledge questions
private JLabel questionLabel;
private JButton randomButton;
public QuestionPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
questionLabel = new JLabel();
randomButton = new JButton("Next question");
randomButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = "?";
switch ((int)Math.round(Math.random() * 2)) {
case 0:
Collections.shuffle(SPOquestions);
text = SPOquestions.get(0);
break;
case 1:
Collections.shuffle(MUSquestions);
text = MUSquestions.get(0);
break;
case 2:
Collections.shuffle(GENquestions);
text = GENquestions.get(0);
break;
}
questionLabel.setText(text);
}
});
add(questionLabel, gbc);
add(randomButton, gbc);
SPOquestions.add("Who won the 2005 Formula One World Championship?");
SPOquestions.add("Which team has the most Formula One Constructors titles?");
SPOquestions.add("In what year did Roger Federer win his first 'Grand Slam'?");
SPOquestions.add("How many 'Grand Slams' has Rafael Nadal won?");
SPOquestions.add("Who has scored the most amount of goals in the Premier League?");
SPOquestions.add("Who has won the most World Cups in football?");
SPOquestions.add("How many MotoGP titles does Valentino Rossi hold?");
SPOquestions.add("Who was the 2013 MotoGP champion?");
SPOquestions.add("Who won the 2003 Rugby World Cup?");
SPOquestions.add("In rugby league, how many points are awarded for a try?");
SPOquestions.add("Who is the youngest ever snooker World Champion?");
SPOquestions.add("In snooker, what is the highest maximum possible break?");
SPOquestions.add("How many majors has Tiger Woods won?");
SPOquestions.add("In golf, what is the tournament between the USA and Europe called?");
SPOquestions.add("How many World Championships has darts player Phil Taylor won?");
SPOquestions.add("What is the maximum possible amount of points a player can earn from throwing three darts?");
SPOquestions.add("How many gold medals did Michael Phelps win at the 2008 Beijing Olympics?");
SPOquestions.add("Who won the 2012 Olympic 100 metres mens race?");
SPOquestions.add("Which of these events are not a part of the heptathlon?");
SPOquestions.add("When was the first modern Olympics held?");
MUSquestions.add("'Slash' was a member of which US rock band?");
MUSquestions.add("Brian May was a member of which English rock band?");
MUSquestions.add("What is the name of the music festival held annually in the town of Boom, Belgium?");
MUSquestions.add("The rapper Tupac Shakuer '2Pac' died in which year?");
MUSquestions.add("Which of these bands headlined the 2013 Glastonbury music festival?");
MUSquestions.add("Which of these people designed the 'Les Paul' series of guitars?");
MUSquestions.add("Keith Moon was a drummer for which English rock band?");
MUSquestions.add("Kanye West has a total of how many Grammy awards?");
MUSquestions.add("Beyonce Knowles was formally a member of which US group?");
MUSquestions.add("In which US city was rapper 'Biggie Smalls' born?");
MUSquestions.add("Michael Jackson's first number one single in the UK as a solo artist was what?");
MUSquestions.add("The best selling album of all time in the UK is what?");
MUSquestions.add("The best selling album of all time in the US is what?");
MUSquestions.add("What is the artist known as 'Tiesto's real name?");
MUSquestions.add("Which of these was not a member of The Beatles?");
GENquestions.add("Who was the second President of the United States?");
GENquestions.add("The youngest son of Bob Marley was who?");
GENquestions.add("In the film '8 Mile', the character portrayed by Eminem is known as what?");
GENquestions.add("What is the capital city of New Zealand?");
GENquestions.add("What is the capital city of Australia?");
GENquestions.add("How many millilitres are there in an English pint?");
GENquestions.add("What was the biggest selling game for the PS2 worldwide?");
GENquestions.add("What is the last letter of the Greek alphabet?");
GENquestions.add("Who created the television series Futurama?");
GENquestions.add("A word which reads the same backwards as it does forwards is known as a what?");
GENquestions.add("A 'baker's dozen' consists of how many items?");
GENquestions.add("World War 1 officially occured on which date?");
GENquestions.add("'Trouble and strife' is cockney rhyming slang for what?");
GENquestions.add("Who was the last Prime Minister to hail from the labour party in the UK?");
GENquestions.add("WalMart is the parent company of which UK based supermarket chain?");
randomButton.doClick();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 200);
}
}
}
您可能还想查看Java 编程语言的代码约定,它可以让其他人更轻松地阅读您的代码;)
您可能还想阅读Language Basics: Variables , Understanding Class Members and Creating a GUI With JFC/Swing
尝试使用
main.MUSquestions
代替
MUSquestions
或者将 main 替换为您在其中创建 List 的类的名称。
或者,为了使引用更短并使其更快,请通过添加来声明一个新列表
ArrayList<String> MUSquestions = main.MUSquestions
对于你的问题中的上层阶级 - 就像你写下的那样,它找不到 MUSquestions 因为它没有被定义,因为它只在另一个班级中可用。 (就像@MadProgrammer 说的)
在这里,我创建了一个新答案:
这是启动应用程序的主类,并显示我制作的问题类的用法。
import javax.swing.JLabel;
public class Main {
Questions questions = new Questions();
public static void main(String[] args) {
new Main();
}
public Main() {
JLabel label = new JLabel();
label.setText(questions.getRandomQuestion(questions.getSpoQuestions()));
}
}
这是 Questions 类,它提供了一些方法和数组列表以及他们的问题。
import java.util.ArrayList;
import java.util.Random;
public class Questions {
private ArrayList<String> spoQuestions = new ArrayList();
private ArrayList<String> musQuestions = new ArrayList();
private ArrayList<String> genQuestions = new ArrayList();
public Questions() {
createSpoQuestions();
createMusQuestions();
createGenQuestions();
}
public ArrayList<String> getSpoQuestions() {
return spoQuestions;
}
public ArrayList<String> getMusQuestions() {
return musQuestions;
}
public ArrayList<String> getGenQuestions() {
return genQuestions;
}
public String getRandomQuestion(ArrayList<String> list) {
return list.get(new Random().nextInt(list.size()));
}
private void createSpoQuestions() {
spoQuestions.add("Who won the 2005 Formula One World Championship?");
spoQuestions.add("Which team has the most Formula One Constructors titles?");
spoQuestions.add("In what year did Roger Federer win his first 'Grand Slam'?");
spoQuestions.add("How many 'Grand Slams' has Rafael Nadal won?");
spoQuestions.add("Who has scored the most amount of goals in the Premier League?");
spoQuestions.add("Who has won the most World Cups in football?");
spoQuestions.add("How many MotoGP titles does Valentino Rossi hold?");
spoQuestions.add("Who was the 2013 MotoGP champion?");
spoQuestions.add("Who won the 2003 Rugby World Cup?");
spoQuestions.add("In rugby league, how many points are awarded for a try?");
spoQuestions.add("Who is the youngest ever snooker World Champion?");
spoQuestions.add("In snooker, what is the highest maximum possible break?");
spoQuestions.add("How many majors has Tiger Woods won?");
spoQuestions.add("In golf, what is the tournament between the USA and Europe called?");
spoQuestions.add("How many World Championships has darts player Phil Taylor won?");
spoQuestions.add("What is the maximum possible amount of points a player can earn from throwing three darts?");
spoQuestions.add("How many gold medals did Michael Phelps win at the 2008 Beijing Olympics?");
spoQuestions.add("Who won the 2012 Olympic 100 metres mens race?");
spoQuestions.add("Which of these events are not a part of the heptathlon?");
spoQuestions.add("When was the first modern Olympics held?");
}
private void createMusQuestions() {
musQuestions.add("'Slash' was a member of which US rock band?");
musQuestions.add("Brian May was a member of which English rock band?");
musQuestions.add("What is the name of the music festival held annually in the town of Boom, Belgium?");
musQuestions.add("The rapper Tupac Shakuer '2Pac' died in which year?");
musQuestions.add("Which of these bands headlined the 2013 Glastonbury music festival?");
musQuestions.add("Which of these people designed the 'Les Paul' series of guitars?");
musQuestions.add("Keith Moon was a drummer for which English rock band?");
musQuestions.add("Kanye West has a total of how many Grammy awards?");
musQuestions.add("Beyonce Knowles was formally a member of which US group?");
musQuestions.add("In which US city was rapper 'Biggie Smalls' born?");
musQuestions.add("Michael Jackson's first number one single in the UK as a solo artist was what?");
musQuestions.add("The best selling album of all time in the UK is what?");
musQuestions.add("The best selling album of all time in the US is what?");
musQuestions.add("What is the artist known as 'Tiesto's real name?");
musQuestions.add("Which of these was not a member of The Beatles?");
}
private void createGenQuestions() {
genQuestions.add("Who was the second President of the United States?");
genQuestions.add("The youngest son of Bob Marley was who?");
genQuestions.add("In the film '8 Mile', the character portrayed by Eminem is known as what?");
genQuestions.add("What is the capital city of New Zealand?");
genQuestions.add("What is the capital city of Australia?");
genQuestions.add("How many millilitres are there in an English pint?");
genQuestions.add("What was the biggest selling game for the PS2 worldwide?");
genQuestions.add("What is the last letter of the Greek alphabet?");
genQuestions.add("Who created the television series Futurama?");
genQuestions.add("A word which reads the same backwards as it does forwards is known as a what?");
genQuestions.add("A 'baker's dozen' consists of how many items?");
genQuestions.add("World War 1 officially occured on which date?");
genQuestions.add("'Trouble and strife' is cockney rhyming slang for what?");
genQuestions.add("Who was the last Prime Minister to hail from the labour party in the UK?");
genQuestions.add("WalMart is the parent company of which UK based supermarket chain?");
}
}
这两段代码是一个完全可以工作的应用程序。 我没有制作 GUI 上下文,因为目的是向您展示如何在标签中使用它。
方法
public String getRandomQuestion(ArrayList<String> list) {
return list.get(new Random().nextInt(list.size()));
}
将返回一个字符串,从该方法给出的列表中随机抽取。 因此,查看 Main 类示例,您可以看到我通过调用该列表的 getter 从 spoQuestions ArrayList 中提取了一个随机问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.