谁能帮我写个Java小项目,是简单的,就写小说TXT阅读器的好了,最少要用到流和集合。麻烦注释下可以吗?

2.1 用户登录
2.2 用户注册
2.3 小说阅读
2.4 小说下载
2.5 小说上传

麻烦大哥大姐 实现这几个要求 麻烦了

第1个回答  推荐于2016-11-03

只提供一个小说阅读,如下

package reader;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class Notebook {
private JFrame frame;
private JTextArea textArea;
private JMenuBar menuBar;
private JMenu file, format, search, help;
private JMenuItem open, exit;
private JMenuItem font, color, background, speed;
private JMenuItem find, changeto;
private JMenuItem helps, about;
private Boolean autoLineWrap = true;
private String fileName = "未命名";// 文件名
// private File currentFile ;
private JScrollPane jsp;
private JScrollBar jsb;
private Speed sped;
private font font1;
int delay = 10;
Timer timer = new Timer(delay, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jsb.setValue(jsb.getValue() + jsb.getUnitIncrement());
}
});

public Notebook() {
frame = new JFrame();
frame.setTitle("未命名");
frame.setLayout(new BorderLayout());
textArea = new JTextArea();
textArea.setFont(new Font("宋体", Font.PLAIN, 18));// 设置默认字体样式字号
// set input textArea 设置编辑区
textArea.setText("");
textArea.setEditable(false);
textArea.setLineWrap(autoLineWrap);// 设置自动换行
jsp = new JScrollPane(textArea);// set Scroll
jsb = jsp.getVerticalScrollBar();
jsb.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
int i;
i = jsb.getUnitIncrement();
System.out.println(i);
}
});
frame.add(jsp, BorderLayout.CENTER);
// 菜单
menuBar = new JMenuBar();
file = new JMenu("文件");
file.setMnemonic('F');
format = new JMenu("格式");
search = new JMenu("搜索");
help = new JMenu("帮助");
menuBar.add(file);
menuBar.add(format);
menuBar.add(search);
menuBar.add(help);
// 文件菜单项
open = new JMenuItem("打开...", KeyEvent.VK_O);
exit = new JMenuItem("退出");
file.add(open);
file.add(exit);
// 格式菜单项
// autoLine = new JCheckBoxMenuItem("自动换行");
font = new JMenuItem("字体...");
color = new JMenuItem("颜色...");
background = new JMenuItem("背景颜色...");
speed = new JMenuItem("滚屏速度...");
// format.add(autoLine);
format.add(font);
format.add(color);
format.add(background);
format.add(speed);
// 搜索菜单项
find = new JMenuItem("查找...");
changeto = new JMenuItem("转到...");
search.add(find);
search.add(changeto);
// 帮助菜单项
helps = new JMenuItem("帮助");
about = new JMenuItem("关于");
help.add(helps);
help.add(about);
// 设置菜单条
menuBar.add(file);
menuBar.add(format);
menuBar.add(search);
menuBar.add(help);
frame.setJMenuBar(menuBar);
// sped///
sped = new Speed(jsb, timer);
font1 = new font(textArea);
// 调用监听方法
addEventHandler();
// ////
textArea.addMouseListener(new MouseListener() {

public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
timer.start();
}
if (e.getClickCount() == 1) {
timer.stop();
}

}

public void mouseEntered(MouseEvent arg0) {
}

public void mouseExited(MouseEvent arg0) {
}

public void mousePressed(MouseEvent arg0) {
}

public void mouseReleased(MouseEvent arg0) {
}
});
// 监听上下键//
textArea.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_UP) {
jsb.setValue(jsb.getValue() - jsb.getUnitIncrement());
}
if (arg0.getKeyCode() == KeyEvent.VK_DOWN) {
jsb.setValue(jsb.getValue() + jsb.getUnitIncrement());
}
}

public void keyReleased(KeyEvent arg0) {
}

public void keyTyped(KeyEvent arg0) {
}
});
//
textArea.addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
timer.start();
}
if (e.getClickCount() == 1) {
timer.stop();
}

}

public void mouseEntered(MouseEvent arg0) {
}

public void mouseExited(MouseEvent arg0) {
}

public void mousePressed(MouseEvent arg0) {
}

public void mouseReleased(MouseEvent arg0) {
}
});

}

// /////////初始化frame////////////////
protected void frameInit() {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(d.width, d.height);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension b = frame.getSize();
}

private void addEventHandler() {
// 文件项的监听
open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileOpen();
jsb.setValue(0);
}
});
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileExit();
}
});
// 格式菜单的监听
font.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
font1.addEventHandler();
}
});
color.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
formatColor();
}
});
background.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
formatBackground();
}
});

speed.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sped.liser();
}
});
}

// ////////文件项的方法/////////////////////////
private void fileOpen() {
textArea.setText("");
JFileChooser fileChooser = new JFileChooser();
fileChooser.showOpenDialog(frame);
File file = fileChooser.getSelectedFile();
if (file == null)
return;
fileName = file.getName();// 获得文件名
frame.setTitle(file.getAbsolutePath());
FileInputStream fis = null;
BufferedReader br = null;
try {
fis = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(fis));
String str = null;
while ((str = br.readLine()) != null) {
textArea.append(str + "\n");
}
System.out.println("打开成功");
textArea.setCaretPosition(0);
} catch (IOException e1) {
JOptionPane.showMessageDialog(frame, "文件不存在或已被损坏");
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
}
if (fis != null)
try {
fis.close();
} catch (IOException e) {
}
}
}

private void fileExit() {
int option = -1;
Object options[] = { "Yes", "No" };
option = JOptionPane.showOptionDialog(frame, "是否退出阅读?", "exit",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, options[0]);
switch (option) {
case JOptionPane.YES_OPTION:
System.exit(0);
}
}

// //////////////////////////////////////////////////////////
// ///////////////格式项的方法/////////////////////////////////
private void formatColor() {
// 弹出颜色色选择器对话框
Color color = JColorChooser.showDialog(textArea, "选择颜色", Color.BLACK);
textArea.setForeground(color);
}

private void formatBackground() {
// 弹出颜色色选择器对话框
Color color = JColorChooser.showDialog(textArea, "选择颜色", Color.BLACK);
textArea.setBackground(color);
}

// ////////////////////////////////////////////////////////////

public static void main(String args[]) {
Notebook nt = new Notebook();
nt.frameInit();

}

}

class font {
private JTextArea textArea;
private JButton ok, cancel;
private JComboBox fontName, fontSize, fontStyle;
GraphicsEnvironment ge;// 定义系统字体对象
String[] size = { "8", "10", "12", "14", "16", "18", "20", "22", "24",
"26", "28", "32", "36", "48", "72", "96" };
String[] style = { "PLAIN", "BOLD", "ITALIC" };
JFrame jf = new JFrame("字体设置");

public font(JTextArea textArea) {
this.textArea = textArea;
JLabel label1 = new JLabel(
"    字体                                         ");
JLabel label2 = new JLabel(" 字号        ");
JLabel label3 = new JLabel(" 样式        ");
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();// 获取系统字体
String[] fontname = ge.getAvailableFontFamilyNames();
fontName = new JComboBox(fontname);
fontSize = new JComboBox(size);
fontStyle = new JComboBox(style);
ok = new JButton("确定");
cancel = new JButton("取消");
jf.setLayout(new BorderLayout());
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
p1.add(label1);
p1.add(label2);
p1.add(label3);
p2.add(fontName);
p2.add(fontSize);
p2.add(fontStyle);
p3.add(ok);
p3.add(cancel);
jf.add(p1, BorderLayout.NORTH);
jf.add(p2, BorderLayout.CENTER);
jf.add(p3, BorderLayout.SOUTH);
jf.setSize(360, 200);
jf.setLocation(300, 200);
jf.setVisible(false);
jf.setResizable(false);
// addEventHandler();
}

void addEventHandler() {
jf.setVisible(true);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String n1 = (String) fontName.getSelectedItem();
int n2 = fontStyle.getSelectedIndex();
String n3 = (String) fontSize.getSelectedItem();
textArea.setFont(new Font(n1, n2, Integer.parseInt(n3)));
jf.setVisible(false);
}
});
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jf.setVisible(false);// 
}
});
}
}

class Speed implements ItemListener {
private JScrollBar jsb;
private JFrame jfrm;
private JLabel jlb1;
// JLabel jlb2;
private JButton jbt;
// private JCheckBox jcheckbox;
private JComboBox jcbb;
Integer sudu;
Timer timer;
private Integer msg[] = { 1, 10, 18, 36, 48, 66, 80, 90 };

public Speed(final JScrollBar jsb, final Timer timer) {
this.jsb = jsb;
this.timer = timer;
jfrm = new JFrame();
jlb1 = new JLabel("滚屏速度");
jbt = new JButton("确定");
// jcheckbox = new JCheckBox("自动滚屏");
jcbb = new JComboBox(msg);
jfrm.setLayout(new FlowLayout());
jfrm.add(jlb1);
jfrm.add(jcbb);
// jfrm.add(jcheckbox); jfrm.add(jbt);
jfrm.setVisible(false);
jcbb.setEditable(true);
jfrm.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
jfrm.pack();
}

void liser() {
jfrm.setVisible(true);
// /////监听复选框///////////////////////////
jcbb.addItemListener(this);
/*
 * jcbb.addActionListener(new ActionListener(){ public void
 * actionPerformed(ActionEvent e) {
 * jcbb.setSelectedIndex(jcbb.getSelectedIndex()); }});
 */
// ///////监听按钮//////////////////////////
jbt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
jfrm.setVisible(false);
}
});
// ////////////////////////////////////

/*
 * jcheckbox.addItemListener(new ItemListener(){ public void
 * itemStateChanged(ItemEvent e) { if(jcheckbox.isSelected()==false){
 * System.out.println("false"); timer.stop(); }
 * if(jcheckbox.isSelected()==true){ timer.start(); } }} );
 */
}

@Override
public void itemStateChanged(ItemEvent arg0) {
sudu = (Integer) jcbb.getSelectedItem();
// jcbb.setSelectedItem(msg);//jcbb.updateUI() ;
jsb.setUnitIncrement(sudu.intValue());
}
}

追问

运行不了呢?

追答

我测试运行通过才给你的呀~~运行结果如下图


采纳吧,采纳后,你再给你一个登陆的~~

追问

哦哦 对 运行就是这样的 怎么弄呢?

追答

文件阅读器啊,点击文件,选择想要阅读的文本,就可以阅读了啊~~

追问

额 没别的功能了?

本回答被提问者采纳
第2个回答  2014-09-23
你这个需求,还叫小项目啊
用户登录
用户注册
要连接数据库,要画界面,哪有这么容易
不给钱估计没人会帮你搞的追问

亲 不许用数据库哦 不需要界面 可以再控制台运行就可以了 你又QQ吗?我把需求发给你看看可以吗?

追答

不用web项目,纯java写控制台运行的话很费时

追问

帮帮忙 好不好 好不好

追答

天下没有免费的午餐,你懂的啊

用控制台实现,得弄多久...

追问

控制台好像比那个弄界面容易吧??是吗?没有财富值 就最后一个了 呜呜

本回答被网友采纳

谁能帮我写个Java小项目,是简单的,就写小说TXT阅读器的好了,最少要用...
我的 谁能帮我写个Java小项目,是简单的,就写小说TXT阅读器的好了,最少要用到流和集合。麻烦注释下可以吗? 2.1用户登录2.2用户注册2.3小说阅读2.4小说下载2.5小说上传麻烦大哥大姐实现这几个要求麻烦了... 2.1 用户登录2.2 用户注册2.3 小说阅读2.4 小说下载2.5 小说上传麻烦大哥大姐 实现这几个要求 麻烦了 展开...

java程序要处理一本txt格式的小说,可是里面的章节是乱的。如何对小说...
读取TXT,将每一章转成一个对象,放到list,然后自定义排序规则,排好序后再转成TXT;

我电脑上下了魔兽小说 TXT格式的 放我手机上看不来
小说打开是乱码:试试这种方法吧~打开这本小说(文 本文档)..然后打开上面一栏的文件按钮...(就那一 排.不会搞错吧?!)出现一竖排选项.单击其中的"另存 为"选项..会出现一小边框如图:"XXX"下面会有三条选 项:文件名\\保存类型\\编码\\.前俩不用管他..把编码调 一下就行了~~编码就自己试着调...

普通手机能用TXT阅读器看小说吗?
普通手机不一定行,要看你手机支持JAVA不,如果支持,可以下载像MOTO-TXT和百阅这类软件来看TXT小说,如果不支持则不行.你装起看不了有可能是格式不正确,你不如直接下载JAVA小说

新人写小说是纵横好还是起点好??希望有详细的解答,悬赏50分
新人写小说是纵横好还是起点好??希望有详细的解答~~~另外一本普通的上架vip小说的单张平均订阅量是多少??这个是重点希望知情人士解答??希望回答不要ctrl+c ctrl+v 另外请回答一下新人写小说是起点好还是纵横好 展开  我来答 6个回答 #热议# 作为女性,你生活中有感受到“不安全感”的时刻吗?咳咳...

如何打好Java的基础?
Spring是Java编程的基础设施,但真要进入到实际项目的开发,还有些东西绕不过,包括 MySql,Mybatis,Redis,Servlet等,但如果你经过Spring的洗礼,这些东西相对就简单多了,以我的经验,1个月的时间足够了。4.实践 学习Java,光学不练肯定是不行的。但因为是自学,所以就没有实际的产品让你练手,但...

java需要学哪些?
动力节点Java教学老师会用实战项目知识向大家生动地讲解相关的Java知识。 3、Java语法的知识。 如果你有C++等面向对象语言的开发经验,你只需简单的翻看一下介绍Java的相关书籍就可以了。 零基础学习Java开发也是没有问题的,选择靠谱的Java培训机构很重要,昆明北大青鸟采用“因材施教,分级培优”满足不同基础学员的需求...

学好java要学哪些知识?
二、JAVA语法:如果您有C++等面向对象语言的开发经验,您只需简单的翻看一下介绍JAVA的相关书籍就可以了。如果您是新手,没有关系,您下些工夫,好好研究一本JAVA初级教程之类的书就可以了。 三、java主要学什么JSP和HTML:做JAVA程序员都少不了和JSP以及HTML打交道。因此,想成为JAVA程序员就不可避免的要熟悉JSP和HTM...

求一个能在JAVA平台上打字的软件、、、能保存,写小说用的、、、我手机...
1.下载一个java的文件管理器,然后新建文本,应该就可以了 2, Anyview 建立个TXT文档,然后打开它编辑 http:\/\/m.baidu.com\/app?action=content&docid=2348424&tj=soft_2348424_1574883402_Anyview阅读_icon&ala=se@v@1@3@icon&f=aladdin@Anyview&bd_page_type=1&pu=usm@1,sz@1321_1003&ssid=0...

到小说网站上写小说能够赚钱吗?
更新的速度,以及作品的命名和简介.要下功夫的,最重要的是,好的小说在尾部会留下追着人继续看下去的伏笔,这是成功的第一步,决定了点击量,然后再发挥自己的个性,双管齐下.一般来说职业的写手日产万字,而且要求质量,人气是网络写手的命脉.很辛苦的,不过如果真的喜欢,那么就去实现自己的想法吧....

相似回答