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

时间:2014-03-26 23:14:53

标签: java swing arraylist jlabel

我试图让我的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?");




}

}

3 个答案:

答案 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: VariablesUnderstanding Class MembersCreating 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中提取一个随机问题。