所以我有一個簡單的GUI,只能打開文本文件,並且應該只顯示它們在要編輯的文本區域中。我知道我的字符串包含文件內容,因爲我可以打印出來,但是當我嘗試將其添加到我的文本區域時,它不會顯示出來。我想知道這是否是一個重疊文本區域的問題,但我似乎無法找到錯誤。Java GUI在打開時不顯示我的文件
我的代碼的第一部分只是創建GUI。另一部分應該打開一個文件並用它填充文本區域。問題究竟在哪裏,我該如何解決?任何幫助,將不勝感激。
這裏是我的代碼部分,它與創建框架和麪板特惠:
public class MenuView extends JFrame {
private JPanel centerPanel;
private JPanel bottomPanel;
private JMenuBar menuBar;
private JMenu fileMenu;
private JMenuItem openItem;
private JMenuItem closeItem;
private JButton setButton;
private JTextField text;
private JTextArea label;
private JMenuItem fileNew;
public MenuView(){
super();
setSize(500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setTitle("Menu Demo");
//The center panel that will contain text
centerPanel = new JPanel();
centerPanel.setLayout(new FlowLayout());
label = new JTextArea(400,500);
centerPanel.add(label);
add(centerPanel, BorderLayout.CENTER);
//The bottom panel with the text field and button
bottomPanel = new JPanel();
bottomPanel.setLayout(new GridLayout(1, 2));
setButton = new JButton("Set Text");
text = new JTextField();
bottomPanel.add(setButton);
bottomPanel.add(text);
add(bottomPanel, BorderLayout.SOUTH);
//Setting up the menu
menuBar = new JMenuBar();
fileMenu = new JMenu("File");
fileNew = new JMenu("New");
openItem = new JMenuItem("Open");
closeItem = new JMenuItem("Exit");
fileMenu.add(openItem);
fileMenu.add(closeItem);
fileMenu.add(fileNew);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
setButton.addActionListener(new ButtonCommand(label, text));
closeItem.addActionListener(new QuitMenuCommand());
openItem.addActionListener(new OpenMenuCommand(label));
}
public static void main(String [] args){
MenuView v = new MenuView();
v.setVisible(true);
}
}
下面是與打開的文件打交道的代碼:
public class OpenMenuCommand implements ActionListener {
private JTextArea theLabel;
private JFileChooser fc;
private String k = "";
public OpenMenuCommand(JTextArea l){
theLabel = l;
theLabel.getParent();
fc = new JFileChooser();
fc.setFileFilter(new FileNameExtensionFilter("Text file", "txt"));
}
public void actionPerformed(ActionEvent e) {
StringBuffer text = new StringBuffer();
int returnValue = fc.showOpenDialog(null);
if(returnValue == fc.APPROVE_OPTION){
theLabel.removeAll();
File f = fc.getSelectedFile();
try{
BufferedReader inFile = new BufferedReader(new FileReader(f));
String in = inFile.readLine();
while(in != null){
k = k + in;
in = inFile.readLine();
}
System.out.println(k);
theLabel.setText(k);
inFile.close();
theLabel.setVisible(true);
}catch(FileNotFoundException exc){
//Should never trigger
}catch(IOException exc){
theLabel.setText("Error reading in file.");
}
}
}
}
有趣的一個。你可以張貼截圖嗎?另外,如果您認爲它可能與JTextFields重疊,則嘗試使用已經包含一些文本的文本字段進行初始化,僅用於測試。如果初始文本顯示出來,那麼我猜你可能沒有重疊的問題。 – jefflunt 2011-05-04 01:56:24
@normalocity:它與重疊無關,而是與將大型組件(JTextArea)添加到小型FlowLayout使用容器有關。 – 2011-05-04 02:15:13
這不是將數據加載到文本區域的方式。只需使用JTextArea.read(...)方法即可。它的一行代碼。無需循環邏輯。 – camickr 2011-05-04 03:11:55