Как отобразить/распечатать строку в значении массива, разделенном запятыми?

#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