?? filetest.java
字號:
package ch02.section09;
import java.beans.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
public class FileTest
extends JFrame {
//用JFileChooser 對話框讓用戶選擇文本文件,創建文本選擇對話框
JFileChooser chooser = new JFileChooser();
TextPreviewer previewer = new TextPreviewer();
JPanel previewPanel = new PreviewPanel();
class PreviewPanel
extends JPanel {
public PreviewPanel() {
JLabel label = new JLabel("Text Previewer",
SwingConstants.CENTER);
setPreferredSize(new Dimension(250, 0));
setBorder(BorderFactory.createEtchedBorder());
setLayout(new BorderLayout());
label.setBorder(BorderFactory.createEtchedBorder());
add(label, BorderLayout.NORTH);
add(previewer, BorderLayout.CENTER);
}
}
public FileTest() {
super("Accessory Components");
//創建內容面板容器
Container contentPane = getContentPane();
JButton button = new JButton("Select A File");
//設置組件布局方式為FlowLayout
contentPane.setLayout(new FlowLayout());
//加入打開文件按鈕
contentPane.add(button);
chooser.setAccessory(previewPanel);
//添加文件過濾器
chooser.addChoosableFileFilter(new TextFilter());
//為文本選擇控件注冊響應事件監聽
chooser.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if (e.getPropertyName().equals(
JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
//修改文本區域的數據
previewer.update( (File) e.getNewValue());
}
}
});
//為按鈕注冊響應事件監聽
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//打開文本選擇對話框
chooser.showOpenDialog(null);
}
});
}
public static void main(String a[]) {
JFrame f = new FileTest();
f.setBounds(300, 300, 300, 75);
//將面板顯示出來
f.setVisible(true);
f.setDefaultCloseOperation(
WindowConstants.DISPOSE_ON_CLOSE);
//注冊關閉窗口事件
f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
}
}
class TextPreviewer
extends JComponent {
private ImageIcon icon;
private JTextArea textArea = new JTextArea();
public TextPreviewer() {
setBorder(BorderFactory.createEtchedBorder());
//設置組件布局方式
setLayout(new BorderLayout());
//將文本區域放入一個滾動面板中,在將這個滾動面板放在容器的中間
add(new JScrollPane(textArea), BorderLayout.CENTER);
}
public void update(File file) {
//通過文本區域將指定的文件內容顯示出來
textArea.setText(contentsOfFile(file));
if (isShowing()) {
textArea.revalidate();
}
}
static String contentsOfFile(File file) {
String s = new String();
//一個字符數組,用于讀取指定文件數據
char[] buff = new char[50000];
InputStream is;
//一個字符輸入流對象
InputStreamReader reader;
URL url;
try {
reader = new FileReader(file);
int nch;
while ( (
//通過循環將指定的文件中數據賦值給一個字符串
nch = reader.read(buff, 0, buff.length)) != -1) {
s = s + new String(buff, 0, nch);
}
}
catch (java.io.IOException ex) {
s = "Could not load file";
}
//返回指定文件的數據
return s;
}
}
abstract class SuffixAwareFilter
extends javax.swing.filechooser.FileFilter {
public String getSuffix(File f) {
String s = f.getPath(), suffix = null;
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
suffix = s.substring(i + 1).toLowerCase();
}
return suffix;
}
public boolean accept(File f) {
return f.isDirectory();
}
}
/*
*用于過濾打開文件類型
*/
class TextFilter
extends SuffixAwareFilter {
public boolean accept(File f) {
String suffix = getSuffix(f);
if (suffix != null) {
//如果文件為指定類型,則返回true,表明可打開
return super.accept(f) || suffix.equals("txt");
}
return false;
}
public String getDescription() {
return "Text Files(*.txt)";
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -