简体   繁体   English

将 JLabel 文本设置为来自 ArrayList 的随机字符串

[英]Setting JLabel text to be random string from an ArrayList

I am trying to get my JLabel's text to be a random selected question (or string) from an ArrayList I have created in a seperate class.我试图让我的 JLabel 的文本成为我在单独的类中创建的 ArrayList 中随机选择的问题(或字符串)。

I have tried as mentioned by another user this code but it says it cannot resolve MUSquestions我已经尝试过另一个用户提到的这段代码,但它说它无法解决 MUSquestions

Question = new JLabel();
    getContentPane().add(Question);
    Question.setText(MUSquestions.get(Math.random()*MUSquestions.size()));
    Question.setBounds(38, 61, 383, 29);

The ArrayList code is as follows 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?");




}

} }

You have a reference problem...你有一个参考问题...

In your main method, you declare three local variables;在你的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
    //...
}

This means that this variables can not be referenced from any other context other than main .这意味着不能从main以外的任何其他上下文引用此变量。 A "simple" solution might be to make them static class variables of the Questions class. “简单”的解决方案可能是使它们成为Questions类的static类变量。 While this would work, this creates problems and represents a larger, long term issue, static is not answer to allowing access to variables, but represents a design problem.虽然这会起作用,但这会产生问题并代表一个更大的长期问题, static不是允许访问变量的答案,而是代表一个设计问题。

Instead, move the variables to the class that needs to use them and create them as instance variables, so that they are unique to each instance of the class...相反,将变量移动到需要使用它们的类中并将它们创建为实例变量,以便它们对于类的每个实例都是唯一的...

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

In this way, QuestionPane can access each of the variables from within it's context (any method declared within QuestionPane )通过这种方式, QuestionPane可以从其上下文中访问每个变量(在QuestionPane声明的任何方法)

For example...例如...

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);
        }

    }

}

You may also want to take a look at Code Conventions for the Java Programming Language , it makes it easier for others to read you code ;)您可能还想查看Java 编程语言的代码约定,它可以让其他人更轻松地阅读您的代码;)

You may also want to have a read through Language Basics: Variables , Understanding Class Members and Creating a GUI With JFC/Swing您可能还想阅读Language Basics: VariablesUnderstanding Class Members and Creating a GUI With JFC/Swing

Try using尝试使用

main.MUSquestions

instead of代替

MUSquestions

Or replace main with what ever your Class you created the List in is named.或者将 main 替换为您在其中创建 List 的类的名称。

Or, to keep the references shorter and make it faster, declare a new list by adding或者,为了使引用更短并使其更快,请通过添加来声明一个新列表

ArrayList<String> MUSquestions = main.MUSquestions

to what is in your question the upper Class - like what you have written down it can't find MUSquestions because it is not defined as it is only available in another class.对于你的问题中的上层阶级 - 就像你写下的那样,它找不到 MUSquestions 因为它没有被定义,因为它只在另一个班级中可用。 (like @MadProgrammer said) (就像@MadProgrammer 说的)

Here I've created a new answer:在这里,我创建了一个新答案:

This is a main class to launch the application, and to show usage of the Questions class I have made.这是启动应用程序的主类,并显示我制作的问题类的用法。

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()));
    }
}

This is the Questions class who provides some methods and arraylists with their questions.这是 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?");
    }
}

These two pieces of code are an entirely working application.这两段代码是一个完全可以工作的应用程序。 I didn't make a GUI context as the purpose is to show you how to use it in a label.我没有制作 GUI 上下文,因为目的是向您展示如何在标签中使用它。

The method方法

    public String getRandomQuestion(ArrayList<String> list) {
        return list.get(new Random().nextInt(list.size()));
    }

will return a String, randomly pulled from the list given with the method.将返回一个字符串,从该方法给出的列表中随机抽取。 So, looking at the Main class example, you can see that I pull a random question from the spoQuestions ArrayList by calling the getter for that list.因此,查看 Main 类示例,您可以看到我通过调用该列表的 getter 从 spoQuestions ArrayList 中提取了一个随机问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM