我创建了一个扩展另一个类的类,这样我就可以从主类中获取JTextArea。我出于某种原因没有收到任何错误。当我得到JTextArea的文本时,它是我将其更改为的文本,但它没有显示在JTextArea上。我正在尝试打开一个txt文件并从文件中获取文本并将其放在JTextArea上。任何人都可以提出任何建议,为什么这可能不起作用?
public JMenuItem open(){
open.addActionListener (new ActionListener (){
public void actionPerformed (ActionEvent e){
jta.setText("");
fileChooser=new JFileChooser();
fileChooser.setDialogTitle("Choose a file...");
int response=fileChooser.showOpenDialog(null);
if(response==JFileChooser.APPROVE_OPTION){
String filePath=fileChooser.getSelectedFile().toString();
try{
File userFile=new File(filePath);
Scanner scan=new Scanner(userFile);
String text="";
while(scan.hasNextLine()){
text+=scan.nextLine();
jta.replaceSelection(text);
}
}catch (IOException e1){
e1.printStackTrace();
}
}
}
});
open.setAccelerator(KeyStroke.getKeyStroke('O', KeyEvent.CTRL_DOWN_MASK));
return open;
}
这个^^^的用法如下:
public class FileMenu extends MenuBar{
private JMenu file=new JMenu("File");
JMenuItem New= new JMenuItem("New");
JMenuItem open= new JMenuItem("Open file...");
JMenuItem save= new JMenuItem("Save");
JMenuItem saveAs= new JMenuItem("Save As...");
JMenuItem close= new JMenuItem("Exit");
public JFileChooser fileChooser;
FileActions fileActions;
public FileMenu(){
}
public JMenu menu(){
fileActions=new FileActions();
file.add(fileActions.newWindow());
file.add(fileActions.open());
file.addSeparator();
file.add(save);
file.add(saveAs);
file.addSeparator();
file.add(close);
save.setAccelerator(KeyStroke.getKeyStroke('S', KeyEvent.CTRL_DOWN_MASK));
saveAs.setAccelerator(KeyStroke.getKeyStroke('E', KeyEvent.CTRL_DOWN_MASK));
close.setAccelerator(KeyStroke.getKeyStroke('Q', KeyEvent.CTRL_DOWN_MASK));
mb.add(file);
return file;
}
}
这是创建JTextArea的地方:
public class Frame {
static final String title="Simple Text Editor";
static final int width=650;
static final int height=700;
public JFrame frame=new JFrame(title);
public JTextArea jta=new JTextArea();
JScrollPane scrollPane=new JScrollPane(jta);
public void create(){
//JFrame
frame.setSize(width,height);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
// JMenuBar
MenuBar menuBar=new MenuBar();
frame.add(menuBar.menuBar(), BorderLayout.NORTH);
jta.setText("Well this works...");
// JTextArea
jta.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
frame.add(scrollPane, BorderLayout.CENTER);
}
}
答案 0 :(得分:3)
似乎您希望使用文本文件的内容填充文本区域。但要做到这一点,你要阅读文本文件的每一行并执行
jta.replaceSelection(text);
但正如其名称和javadoc所示,replaceSelection()
替换了用户在文本区域中选择的文本。您只需要清除文本区域并将文本附加到文本区域:
jta.setText(""); // clear
while (scan.hasNextLine()){
String line = scan.nextLine();
jta.append(line);
jta.append("\n");
}
或者,更容易:
jta.read(new FileReader(userFile, null);
将从您的文件中读取所有内容并使用其内容填充文本区域。