谁能帮我写一个小的Java项目?很简单,写个小说TXT阅读器就行了,至少要用流和集合。你能评论一下吗?

只有一部小说可供阅读,如下

包裹?读者;

进口?Java . awt . *;

进口?Java . awt . event . *;

进口?Java . io . *;

进口?javax . swing . *;

公共?班级?笔记本?{

私人?JFrame?框架;

私人?JTextArea?textArea

私人?JMenuBar?菜单栏;

私人?JMenu?文件,?格式,?搜索,?求助;

私人?JMenuItem?开,?退出;

私人?JMenuItem?字体,?颜色呢?背景,?速度;

私人?JMenuItem?找,?更改为;

私人?JMenuItem?有帮助吗?关于;

私人?布尔?自动换行?=?真实;

私人?字符串?文件名?=?“未命名”;//?文件名

//?私人?文件?currentFile?;

私人?JScrollPane?jsp

私人?JScrollBar?jsb

私人?速度?速度;

私人?字体?font 1;

int?延迟?=?10;

定时器?定时器?=?新的?定时器(延时,?新的?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?evt)?{

jsb.setValue(jsb.getValue()?+?jsb . getunitincrement());

}

});

公共?笔记本()?{

框架?=?新的?JFrame();

Frame.setTitle("未命名");

frame.setLayout(新?BorderLayout());

textArea?=?新的?JTextArea();

textArea.setFont(新?字体("宋体",字体。平平淡淡?18));//?设置默认字体样式字体大小

//?设置?输入?textArea?设置编辑区域

textarea . settext(" ");

textarea . set editable(false);

textarea . setline wrap(autoline wrap);//?设置自动换行

jsp?=?新的?JScrollPane(textArea);//?设置?卷起

jsb?=?JSP . getverticalscrollbar();

jsb.addAdjustmentListener(新?AdjustmentListener()?{

公共?作废?adjustmentValueChanged(adjustment event?e)?{

int?我;

我?=?jsb . getunitincrement();

system . out . println(I);

}

});

frame.add(jsp,?BorderLayout。中心);

//?菜单

菜单栏?=?新的?JMenuBar();

文件?=?新的?JMenu(“文档”);

file . set助记符(' F ');

格式?=?新的?JMenu(" format ");

搜索?=?新的?JMenu("搜索");

救命?=?新的?JMenu(" help ");

menuBar.add(文件);

menuBar.add(格式);

menuBar.add(搜索);

menuBar.add(帮助);

//?文件菜单项

开放?=?新的?JMenuItem("打开...",?关键事件。VK _ O);

退出?=?新的?JMenuItem(" exit ");

file.add(打开);

file.add(退出);

//?格式化菜单项

//?自动线?=?新的?JCheckBoxMenuItem("自动换行");

字体?=?新的?JMenuItem ("font ... ");

颜色?=?新的?JMenuItem ("color ... ");

背景?=?新的?JMenuItem("背景色...");

速度?=?新的?JMenuItem("滚动速度...");

//?format.add(自动换行);

format.add(字体);

format.add(颜色);

format.add(后台);

format.add(速度);

//?搜索菜单项

发现?=?新的?JMenuItem("查找...");

换成?=?新的?JMenuItem("转到...");

search.add(查找);

search . add(change to);

//?帮助菜单项

有帮助吗?=?新的?JMenuItem(" help ");

关于什么?=?新的?JMenuItem(" about ");

help . add(helps);

help.add(关于);

//?设置菜单栏

menuBar.add(文件);

menuBar.add(格式);

menuBar.add(搜索);

menuBar.add(帮助);

frame.setJMenuBar(菜单栏);

//?sped///

速度?=?新的?速度(jsb,?定时器);

font1?=?新的?字体(textArea);

//?调用监听方法

add eventhandler();

//?////

textArea.addMouseListener(新?MouseListener()?{

公共?作废?mouseClicked(MouseEvent?e)?{

如果?(e.getClickCount()?==?2)?{

timer . start();

}

如果?(e.getClickCount()?==?1)?{

timer . stop();

}

}

公共?作废?mouse enter(mouse event?arg0)?{

}

公共?作废?mouseExited(MouseEvent?arg0)?{

}

公共?作废?mousePressed(MouseEvent?arg0)?{

}

公共?作废?mouseReleased(MouseEvent?arg0)?{

}

});

//?听向上和向下键//

textArea.addKeyListener(新?KeyListener()?{

@覆盖

公共?作废?按键(按键事件?arg0)?{

如果?(arg0.getKeyCode()?==?关键事件。VK_UP)?{

jsb.setValue(jsb.getValue()?-?jsb . getunitincrement());

}

如果?(arg0.getKeyCode()?==?关键事件。VK_DOWN)?{

jsb.setValue(jsb.getValue()?+?jsb . getunitincrement());

}

}

公共?作废?keyReleased(KeyEvent?arg0)?{

}

公共?作废?keyTyped(KeyEvent?arg0)?{

}

});

//

textArea.addMouseListener(新?MouseListener()?{

@覆盖

公共?作废?mouseClicked(MouseEvent?e)?{

如果?(e.getClickCount()?==?2)?{

timer . start();

}

如果?(e.getClickCount()?==?1)?{

timer . stop();

}

}

公共?作废?mouse enter(mouse event?arg0)?{

}

公共?作废?mouseExited(MouseEvent?arg0)?{

}

公共?作废?mousePressed(MouseEvent?arg0)?{

}

公共?作废?mouseReleased(MouseEvent?arg0)?{

}

});

}

//?/////////初始化框架//////////////。

受保护?作废?frameInit()?{

维度?d?=?Toolkit.getDefaultToolkit()。getScreenSize();

frame.setSize(d.width,d .身高);

frame . set visible(true);

frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);

维度?b?=?frame . getsize();

}

私人?作废?addEventHandler()?{

//?监听文件项目

open.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

file open();

jsb . setvalue(0);

}

});

exit.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

file exit();

}

});

//?格式菜单的监控

font.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

font 1 . add eventhandler();

}

});

color.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

format color();

}

});

background.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

format background();

}

});

speed.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

sped . liser();

}

});

}

//?////////文件项的方法///////////////////////

私人?作废?fileOpen()。{

textarea . settext(" ");

JFileChooser?文件选择器?=?新的?jfile chooser();

file chooser . showopendialog(frame);

文件?文件?=?file chooser . getselectedfile();

如果?(文件?==?空)

返回;

文件名?=?file . getname();//?获取文件名

frame . settitle(file . getabsolutepath());

FileInputStream?fis?=?null

BufferedReader?br?=?null

试试?{

fis?=?新的?FileInputStream(文件);

br?=?新的?BufferedReader(新?InputStreamReader(fis))。

字符串?str?=?null

什么时候?((str?=?br.readLine())?!=?null)?{

textArea.append(str?+?" \ n ");

}

System.out.println("打开成功");

textarea . setcaretposition(0);

}?接住?(IOException?e1)?{

joptionpane . showmessagedialog(frame,?”文件不存在或已损坏”);

}?终于?{

如果?(br?!=?空)

试试?{

br . close();

}?接住?(IOException?e)?{

}

如果?(fis?!=?空)

试试?{

fis . close();

}?接住?(IOException?e)?{

}

}

}

私人?作废?fileExit()?{

int?选项?=?-1;

对象?选项[]?=?{?“是的”,?“没有”?};

选项?=?joptionpane . showoptiondialog(frame,?“要不要退出读书?”,?“退出”,

JOptionPane。是_否_选项,?JOptionPane。问题_留言,?空,

选项,?选项[0]);

切换?(选项)?{

案子?JOptionPane。是_选项:

system . exit(0);

}

}

//?//////////////////////////////////////////////////////////

//?/////////////////格式项的方法////////////////////////

私人?作废?formatColor()。{

//?弹出颜色颜色选择器对话框

颜色?颜色?=?jcolorchooser . showdialog(textArea,?“选择一种颜色”?颜色。黑色);

textarea . set foreground(color);

}

私人?作废?formatBackground()。{

//?弹出颜色颜色选择器对话框

颜色?颜色?=?jcolorchooser . showdialog(textArea,?“选择一种颜色”?颜色。黑色);

textArea.setBackground(颜色);

}

//?////////////////////////////////////////////////////////////

公共?静电?作废?main(字符串?args[])?{

笔记本?nt?=?新的?笔记本();

nt . frame init();

}

}

班级?字体?{

私人?JTextArea?textArea

私人?JButton?好吧。取消;

私人?JComboBox?字体名称,字体大小?fontStyle

图形环境?葛;//?定义系统字体对象

String[]?尺寸?=?{?"8",?"10",?"12",?"14",?"16",?"18",?"20",?"22",?"24",

"26",?"28",?"32",?"36",?"48",?"72",?"96"?};

String[]?风格?=?{?“平平淡淡”,?“大胆”,?“斜体”?};

JFrame?jf?=?新的?JFrame("字体设置");

公共?字体(JTextArea?textArea)?{

this.textArea?=?textArea

JLabel?label1?=?新的?JLabel(

“字体?”);

JLabel?label2?=?新的?JLabel("?字号”);

JLabel?label3?=?新的?JLabel("?风格”);

葛?=?graphics environment . getlocalgraphicsenvironment();//?获取系统字体

String[]?字体名称?=?ge . getavailablefontfamilynames();

字体名称?=?新的?JComboBox(字体名称);

fontSize?=?新的?JComboBox(大小);

fontStyle?=?新的?JComboBox(样式);

好吗?=?新的?JButton(" OK ");

取消?=?新的?JButton(" cancel ");

jf.setLayout(新?BorderLayout());

JPanel?p1?=?新的?JPanel();

JPanel?p2?=?新的?JPanel();

JPanel?p3?=?新的?JPanel();

p 1 . add(label 1);

p 1 . add(label 2);

p 1 . add(label 3);

p2.add(字体名称);

p2 . add(fontSize);

p2 . add(font style);

P3 . add(ok);

p3 .添加(取消);

jf.add(p1,?BorderLayout。北);

jf.add(p2,?BorderLayout。中心);

jf.add(p3,?BorderLayout。南);

jf.setSize(360,?200);

jf.setLocation(300,?200);

JF . set visible(false);

JF . setresizable(false);

//?add eventhandler();

}

作废?addEventHandler()?{

JF . set visible(true);

ok.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

字符串?n1?=?(字符串)?font name . getselecteditem();

int?n2?=?font style . getselectedindex();

字符串?n3?=?(字符串)?fontsize . getselecteditem();

textArea.setFont(新?字体(n1,?n2,?integer . parse int(n3)));

JF . set visible(false);

}

});

cancel.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?e)?{

JF . set visible(false);//?

}

});

}

}

班级?速度?器物?ItemListener?{

私人?JScrollBar?jsb

私人?JFrame?jfrm

私人?JLabel?jlb 1;

//?JLabel?jlb2

私人?JButton?jbt

//?私人?JCheckBox?jcheckbox

私人?JComboBox?jcbb

整数?苏都;

定时器?计时器;

私人?整数?msg[]?=?{?1,?10,?18,?36,?48,?66,?80,?90?};

公共?速度(最终?JScrollBar?jsb,?决赛?定时器?定时器)?{

this.jsb?=?jsb

这个计时器?=?计时器;

jfrm?=?新的?JFrame();

jlb1?=?新的?JLabel(“滚动速度”);

jbt?=?新的?JButton(" OK ");

//?jcheckbox?=?新的?JCheckBox("自动滚动");

jcbb?=?新的?JComboBox(msg);

jfrm.setLayout(新?FlowLayout());

jfrm . add(jlb 1);

jfrm . add(jcbb);

//?jfrm . add(jcheckbox);?jfrm . add(jbt);

jfrm . set visible(false);

jcbb . set editable(true);

jfrm . setdefaultcloseoperation(JFrame。HIDE _ ON _ CLOSE);

jfrm . pack();

}

作废?liser()?{

jfrm . set visible(true);

//?//////监控复选框/////////////////////////////////////////////////////////

jcbb . additem listener(this);

/*

?*?jcbb.addActionListener(新?ActionListener(){?公共?空的

?*?actionPerformed(ActionEvent?e)?{

?*?jcbb . setselectedindex(jcbb . getselectedindex());?}});

?*/

//?///////听按钮////////////////////////////////////////

jbt.addActionListener(新?ActionListener()?{

公共?作废?actionPerformed(ActionEvent?arg0)?{

jfrm . set visible(false);

}

});

//?////////////////////////////////////

/*

?*?jcheckbox.addItemListener(新?ItemListener(){?公共?空的

?*?itemStateChanged(ItemEvent?e)?{?if(jcheckbox . is selected()= = false){

?*?system . out . println(" false ");?timer . stop();?}

?*?if(jcheckbox . is selected()= = true){?timer . start();?}?}}?);

?*/

}

@覆盖

公共?作废?itemStateChanged(ItemEvent?arg0)?{

苏都?=?(整数)?jcbb . getselecteditem();

//?jcbb . setselecteditem(msg);//jcbb.updateUI()?;

jsb . setunitincrement(sudu . int value());

}

}