Вывод данных с файла в элементы JButton в одном окне (Java GUI)

я делаю симулятор работы телевизора, и вот какая у меня проблема: я имею окно с разными кнопками, что то на подобии пульта, и когда я нажимаю на первую кнопку то хочу что бы в новом окне у меня появился список моих программ которые я считываю с файла, но сейчас у меня появляется по одной программе в виде кнопке в каждом новом окне, и я понимаю что это
из за тогда что я в цикле создаю новые окна, но когда пытаюсь создать одно окно вне цикла, то у меня это окно не видит созданных мной ранее в цикле - программ-кнопок, и во вопрос: можно ли сделать так, что бы каждая строка в файле.txt - это новый JButton, то есть должен появится список программ из JButton'ов в ОДНОМ окне). Буду рад за любые подсказки, вот мой код:

public class Main {
    public static void main (String[] args) {
        Okno app = new Okno();
        app.setVisible(true);
    }
}
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.*;
/**
 *
 * @author vlady
 */
public class Okno extends JFrame {
    //private JLabel label = new JLabel("Symulator pracy telewizora");
    private JButton WyborProgramu = new JButton("Wybor programu");
    private JButton ZmianaUstawien = new JButton("Zmiana ustawien");
    private JButton NagrywanieProgramow = new JButton("Nagrywanie programow");
    private JButton OdtwarzanieProgramow = new JButton("Odtwarzanie programow");
    private JButton YouTube = new JButton("YouTube");
    private JButton Przegladarka = new JButton("Przegladarka");
    private JButton DziennikPracy = new JButton("DziennikPracy");
    
    public Okno() {
        super("Symulator pracy telewizora");
        this.setBounds(800, 400, 300, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        Container container = this.getContentPane();
        container.setLayout(new GridLayout(4, 2, 20, 20));
        container.add(WyborProgramu);
        container.add(ZmianaUstawien);
        container.add(NagrywanieProgramow);
        container.add(OdtwarzanieProgramow);
        container.add(YouTube);
        container.add(Przegladarka);
        container.add(DziennikPracy);
        
        WyborProgramu.addActionListener(new wyborprogramu ());
        
    }
    
    class wyborprogramu implements ActionListener {
        public void actionPerformed (ActionEvent ee) {
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader("ListaProgramow.txt"));
                String line;
                String lineAll = (" ");
                while((line = br.readLine()) != null) {
                JButton program = new JButton(line); 
                JOptionPane.showMessageDialog(null, program, "Lista programow", JOptionPane.PLAIN_MESSAGE);
                }
            } catch(IOException e) {
                System.out.println("Error: " + e);
            } finally {
                try {
                br.close();
                } catch(IOException e) {
                System.out.println("Error: " + e);
                }
            }
        }
    }
}


Ответы (1 шт):

Автор решения: Perfect Voyage

Нужно создать панель, на которую можно добавлять объекты, в данном случае кнопки. А в JOptionPane передавать эту самую панель

public void actionPerformed (ActionEvent ee) {

        BufferedReader br = null;
        // Create Panel for all button
        Panel panel = new Panel();
        panel.setLayout(new FlowLayout());


        try {
            br = new BufferedReader(new FileReader("ListaProgramow.txt"));
            String line;
            // String lineAll = (" ");  ?

            while((line = br.readLine()) != null) {
                JButton program = new JButton(line);
                panel.add(program);
            }

            JOptionPane.showMessageDialog(null, panel, "Lista programow", JOptionPane.PLAIN_MESSAGE);
        }

        catch(IOException e) {
            System.out.println("Error: " + e);
        }
        finally {
            try { br.close(); }
            catch(IOException e) { System.out.println("Error: " + e); }
        }
    }
→ Ссылка