2011-03-26 46 views
0

我在JPanel中顯示文本時遇到困難。問題是我必須使用JLabel來顯示文本,還是有其他方法可以這樣做?這似乎是大多數教程告訴我的,我只是不確定。如何在JPanel中顯示文件中的文本?

的代碼看起來是這樣的:

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()); 
      } 

    } 

非常感謝提前。

+1

我會在只讀模式下使用JTextPane。這非常簡單,關心流程和文字換行,如果需要,可以包含HTML或RTF格式和/或圖形。 – 9000 2011-03-26 10:15:07

回答

1

國際海事組織,雖然你不使用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); 
.... 
+0

非常感謝,它的工作原理。但是,我應該怎麼做才能讓它逐行顯示?而不是隻有一個長線? – user677884 2011-03-28 14:30:53

+0

看看這裏:http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html – MByD 2011-03-28 14:40:54

1

我認爲,如果你更換:

sb.append(strLine); 

有:

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

您將爲每一行輸入的文本行創建一個新行。應該修復單行問題。

+0

像JTextArea'這樣的組件將被包裝,如果配置這樣做。只有在使用HTML格式時,'JLabel'纔會換行 - 新的換行符被忽略。 ..和'/ n'不是任何*平臺上的新行字符。嘗試使用'System.getProperty(「line.separator」)'。 – 2011-07-30 14:06:16