我试图让我的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?");
}
}
答案 0 :(得分:1)
您有参考问题......
在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
以外的任何其他上下文引用此变量。 A&#34;简单&#34;解决方案可能是使static
类的Questions
类变量。虽然这会起作用,但这会产生问题并代表一个更大的长期问题,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);
}
}
}
您可能还想查看Code Conventions for the Java Programming Language,这样可以让其他人更方便地阅读您的代码;)
您可能还想阅读Language Basics: Variables,Understanding Class Members和Creating a GUI With JFC/Swing
答案 1 :(得分:0)
尝试使用
main.MUSquestions
而不是
MUSquestions
或者用您创建列表的类来替换main。
或者,为了缩短参考时间并使其更快,请通过添加
来声明新列表ArrayList<String> MUSquestions = main.MUSquestions
你问题中的上层 - 就像你写下来的那样,它找不到MUSquestions,因为它没有被定义,因为它只在另一个类中可用。 (比如@MadProgrammer说)
答案 2 :(得分:0)
我在这里创建了一个新答案:
这是一个启动应用程序的主类,并显示我所使用的问题类的用法。
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()));
}
}
这是提供一些方法和arraylists的问题类。
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()));
}
将返回一个String,从随该方法给出的列表中随机拉出。因此,查看Main类示例,您可以看到我通过调用该列表的getter从spoQuestions ArrayList中提取一个随机问题。