Как отобразить текст из файла в JPanel? - PullRequest
0 голосов
/ 26 марта 2011

У меня трудности с отображением текста в JPanel. Вопрос в том, должен ли я использовать JLabel для отображения текста, или есть какой-то другой способ сделать это? Кажется, это то, о чем говорит большинство уроков, я просто не уверен.

Код выглядит так:

public class WhatToDo extends JFrame{

    public void aboutus(){

          try{
                //open the file
                FileInputStream inMessage = new FileInputStream("aboutus.txt");
                // Get the object of DataInputStream
                DataInputStream in = new DataInputStream(inMessage);
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                String strLine;
                //Read File Line By Line
                    while ((strLine = br.readLine()) != null)   {
                        // Print the content on the console
                        System.out.println (strLine);
                    }
                    //Close the input stream
                    in.close();


        Container con = getContentPane();

        con.setLayout(null);
        ImageIcon imh1 = new ImageIcon("img/aboutus.png");
        setSize(imh1.getIconWidth(), imh1.getIconHeight());
        JPanel panelBgImg = new JPanel()
        {
            public void paintComponent(Graphics g) 
            {
                Image img = new ImageIcon("img/aboutus.png").getImage();
                Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
                setPreferredSize(size);
                setMinimumSize(size);
                setMaximumSize(size);
                setSize(size);
                setLayout(null);
                g.drawImage(img, 0, 0, null);
            } 
        };

        Container pane = getContentPane();

        JPanel back = new JPanel(new FlowLayout());
        back.add(new AboutUsBack(null));
        back.setBounds(1170, 665, 83, 85);  
        back.setBackground(new Color(118, 122, 117, 0));
        pane.add(back);

        JPanel content = new JPanel(new FlowLayout());
        content.setToolTipText(strLine);
        content.setForeground(Color.red);
        content.setBounds(570, 165, 583, 85);   
        content.setFont(new Font("Dialog", 1, 14));     
        pane.add(content);

        con.add(panelBgImg);
        panelBgImg.setBounds(0, 0, imh1.getIconWidth(), imh1.getIconHeight());

        setUndecorated(true);
        setResizable(true);
        setVisible(true);

          }catch (Exception e){//Catch exception if any
              System.err.println("Error: " + e.getMessage());
          }

    }

Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 30 июля 2011

Я думаю, если вы замените:

sb.append(strLine); 

с:

sb.append(strLine+"/n"); 

вы создадите новую строку для каждой введенной строки текста. Это должно решить проблему с одной строкой.

1 голос
/ 26 марта 2011

IMO, хотя у вас нет для использования JLabel, это наиболее подходящий компонент для отображения текста, который никто не должен редактировать. Что касается вашей проблемы, кажется, что вы присваиваете strLine только одну строку, когда читаете ее, я думаю, что было бы лучше, если бы вы добавили другую переменную для хранения этой полной String:

String strLine;
StringBuilder sb = new StringBuilder();
//Read File Line By Line
while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);
      sb.append(strLine);
}

И отобразить его позже (я полагаю, на панели содержимого):

JPanel content = new JPanel(new FlowLayout());
JLabel info_from_file = new JLabel(sb.toString());
content.add(info_from_file);
content.setToolTipText(strLine);
content.setForeground(Color.red);
....
...