当我在 JList 中单击文件时如何显示文件中的文本?
How to display the text within files when I click on them in my JList?
我正在编写一个 Java GUI 程序来满足以下规范:编写一个 Java GUI 应用程序,它允许用户 select 来自本地文件系统。在带有滚动条的 JTextArea 中显示 selected 文件的内容。只支持显示文本文件就够了
我现在正在尝试实现将在 JTextArea 中显示 selected 文件内容的功能,但我不知道如何执行此操作。我假设我将向 JList 添加某种事件侦听器,然后在 JTextArea 上调用 setText 但不知道如何去做。任何其他改进我的程序以满足规范的建议都会很棒。这是我的 GUI class:
import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.io.File;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileSystemView;
public class FileGUI {
@SuppressWarnings("unchecked")
public FileGUI() {
JFrame window = new JFrame("Local File List");
Container pane = window.getContentPane();
pane.setLayout(new GridLayout(2,1));
@SuppressWarnings("rawtypes")
JList fileList = new JList(new File("C:\").listFiles());
fileList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
fileList.setCellRenderer(new MyCellRenderer());
fileList.setLayoutOrientation(javax.swing.JList.HORIZONTAL_WRAP);
fileList.setName("fileList");
fileList.setVisibleRowCount(-1);
pane.add(new JScrollPane(fileList));
JTextArea jt = new JTextArea(20, 50);
jt.setEditable(false);
JScrollPane js = new JScrollPane(jt);
pane.add(js);
window.pack();
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
@SuppressWarnings("unused")
FileGUI FG = new FileGUI();
}
});
}
private static class MyCellRenderer extends DefaultListCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(@SuppressWarnings("rawtypes") JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof File) {
File file = (File) value;
setText(file.getName());
setIcon(FileSystemView.getFileSystemView().getSystemIcon(file));
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
}
return this;
}
}
}
谢谢你的时间。
一种简单的方法是在您的 onclick 侦听器中读取文件,然后更新您的视图。
list_item.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
try{
BufferedReader br = new BufferedReader(new FileReader("C:\myfile.txt"));
String line;
while ((line = br.readLine())!= null)
{
// read file line by line here
your_text_area.append(line+"\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
});
其他来源:
- Find selected item of a JList and display it in real time
我正在编写一个 Java GUI 程序来满足以下规范:编写一个 Java GUI 应用程序,它允许用户 select 来自本地文件系统。在带有滚动条的 JTextArea 中显示 selected 文件的内容。只支持显示文本文件就够了
我现在正在尝试实现将在 JTextArea 中显示 selected 文件内容的功能,但我不知道如何执行此操作。我假设我将向 JList 添加某种事件侦听器,然后在 JTextArea 上调用 setText 但不知道如何去做。任何其他改进我的程序以满足规范的建议都会很棒。这是我的 GUI class:
import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.io.File;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileSystemView;
public class FileGUI {
@SuppressWarnings("unchecked")
public FileGUI() {
JFrame window = new JFrame("Local File List");
Container pane = window.getContentPane();
pane.setLayout(new GridLayout(2,1));
@SuppressWarnings("rawtypes")
JList fileList = new JList(new File("C:\").listFiles());
fileList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
fileList.setCellRenderer(new MyCellRenderer());
fileList.setLayoutOrientation(javax.swing.JList.HORIZONTAL_WRAP);
fileList.setName("fileList");
fileList.setVisibleRowCount(-1);
pane.add(new JScrollPane(fileList));
JTextArea jt = new JTextArea(20, 50);
jt.setEditable(false);
JScrollPane js = new JScrollPane(jt);
pane.add(js);
window.pack();
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
@SuppressWarnings("unused")
FileGUI FG = new FileGUI();
}
});
}
private static class MyCellRenderer extends DefaultListCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(@SuppressWarnings("rawtypes") JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof File) {
File file = (File) value;
setText(file.getName());
setIcon(FileSystemView.getFileSystemView().getSystemIcon(file));
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
}
return this;
}
}
}
谢谢你的时间。
一种简单的方法是在您的 onclick 侦听器中读取文件,然后更新您的视图。
list_item.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
try{
BufferedReader br = new BufferedReader(new FileReader("C:\myfile.txt"));
String line;
while ((line = br.readLine())!= null)
{
// read file line by line here
your_text_area.append(line+"\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
});
其他来源:
- Find selected item of a JList and display it in real time