Вывод данных с файла в элементы 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 шт):
Нужно создать панель, на которую можно добавлять объекты, в данном случае кнопки. А в 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); }
}
}