2012-08-08 81 views
1

我試圖做一個JFrame飛看來,讀取文本文件中的每一行成一個JLabel和地方是JLabelJScrollPane,即JScrollPane,然後添加到Container我的窗口。內容和標籤被加載,但有一個問題,只要窗口加載我的JScrollPane拉鍊拉出並離開Container離開我一個空白窗口。任何幫助?這裏是代碼:JScorllPane文本從窗口

import java.awt.Container; 
import java.util.Scanner; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JScrollPane; 

public class Helper extends JFrame{ 

String filepath = "assets/help.txt"; 
Scanner reader; 
Container contentpane; 
JScrollPane scrp = new JScrollPane(null); 
JLabel line = new JLabel(); 
int align_x, align_y; 
int window_width = 700; 
int window_height = 700; 

public Helper(){ 
    setSize(window_height,window_width); 
    setVisible(true); 
    setTitle("Electric Force Calculator Helper"); 
    scrp.setSize(window_height,window_width); 
    scrp.setVisible(true); 

    contentpane = getContentPane(); 
    reader = new Scanner(getClass().getResourceAsStream(filepath)); 

    align_x = 10; 
    align_y = 10; 

    while(reader.hasNextLine()){ 
     line = new JLabel(reader.nextLine()); 
     line.setBounds(align_x,align_y,window_width,20); 
     scrp.add(line); 
     align_y+=20; 
    } 
    contentpane.add(scrp); 

} 

public static void showHelpFrame(){ 
    Helper newHelper = new Helper(); 
} 
} 

回答

1

line = new JLabel(reader.nextLine());這裏每次您要創建一個新的標籤,然後補充說,標籤比其他標籤的JScrollPanescrp.add(line);

一個更好的辦法來做到這一點是使用一個JList,將JList包裝在JScrollPane中,然後用您的文本行填充列表的數據模型。

DefaultListModel<String> lines = new DefaultListModel<String>(); 
JList l = new JList(lines); 
JScrollPane scrp = new JScrollPane(l); 

while(reader.hasNextLine()) { 
    lines.addElement(reader.nextLine()); 
} 
+0

這工作完美!謝謝 – imkendal 2012-08-08 17:07:18

1

是的,請勿使用JLabel。使用JList。或者,首先將所有JLabel添加到單獨的JPanel,然後將其添加到JSCrollPane。

我有一些建議給你。變量

  1. 使用更加用戶友好的名稱(這些名稱是小的。你真的需要使用下劃線,而不是使用駱駝情況呢?這是由你反正)

  2. 不要設置甚至在你完成最簡單的GUI之前,所有東西都可見。儘可能在構造函數結尾處顯示可見的東西

  3. 您正在擴展JFrame。所以,讓它可見。在這裏,你也調用了 setVisible(true)給JScrollPane,這是沒有必要的。

  4. 調用getContentPane最簡單的方法是getContentPane()。add(stuff)。不需要爲此創建單獨的變量。

  5. 初始化構造函數中的變量。不是在這之前,把它放在一切的一邊。這是可能的,但這並不意味着它是好的。

+0

總是樂於收到有用的提示,從現在開始我會記住這些 – imkendal 2012-08-08 16:55:45