我编的记事本,然后下面文本区写东西一行可以写无限,如何添加滚动条限制每行可输入的数目?需要加监听器吗?附源码
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class NoteBook extends JFrame{
private JTextArea ta;
private JMenuBar mb;
private JMenu file,form;
private JMenuItem newfile,open,save,saveas,exit;
//private FileDialog fd;
private JScrollPane jsp;
public NoteBook(){
super("记事本");
Container c = getContentPane();
//c.setLayout(new FlowLayout());
jsp = new JScrollPane(ta);
mb = new JMenuBar();
file = new JMenu("文件");
form = new JMenu("格式");
newfile = new JMenuItem("新建");
open = new JMenuItem("打开");
save = new JMenuItem("保存");
saveas = new JMenuItem("另存为");
exit = new JMenuItem("退出");
newfile.addActionListener(new Handler1());
open.addActionListener(new Handler1());
save.addActionListener(new Handler1());
saveas.addActionListener(new Handler1());
exit.addActionListener(new Handler1());
mb.add(file);
mb.add(form);
file.add(newfile);
file.add(open);
file.add(save);
file.add(saveas);
file.add(exit);
setJMenuBar(mb);
ta = new JTextArea();
add(ta);
//add(jsp);
setSize(800,600);
setVisible(true);
}
public static void main(String args[]){
NoteBook nb = new NoteBook();
}
class Handler1 implements ActionListener{
public void actionPerformed(ActionEvent e){
//JMenuItem mi = (JMenuItem)e.getSource();
//if(e.getSource() == newfile)
//if(e.getSource() == open)
//if(e.getSource() == save)
//if(e.getSource() == saveas)
if(e.getSource() == exit)
System.exit(0);
}
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class NoteBook extends JFrame{
private JTextArea ta;
private JMenuBar mb;
private JMenu file,form;
private JMenuItem newfile,open,save,saveas,exit;
//private FileDialog fd;
private JScrollPane jsp;
public NoteBook(){
super("记事本");
Container c = getContentPane();
//c.setLayout(new FlowLayout());
jsp = new JScrollPane(ta);
mb = new JMenuBar();
file = new JMenu("文件");
form = new JMenu("格式");
newfile = new JMenuItem("新建");
open = new JMenuItem("打开");
save = new JMenuItem("保存");
saveas = new JMenuItem("另存为");
exit = new JMenuItem("退出");
newfile.addActionListener(new Handler1());
open.addActionListener(new Handler1());
save.addActionListener(new Handler1());
saveas.addActionListener(new Handler1());
exit.addActionListener(new Handler1());
mb.add(file);
mb.add(form);
file.add(newfile);
file.add(open);
file.add(save);
file.add(saveas);
file.add(exit);
setJMenuBar(mb);
ta = new JTextArea();
add(ta);
//add(jsp);
setSize(800,600);
setVisible(true);
}
public static void main(String args[]){
NoteBook nb = new NoteBook();
}
class Handler1 implements ActionListener{
public void actionPerformed(ActionEvent e){
//JMenuItem mi = (JMenuItem)e.getSource();
//if(e.getSource() == newfile)
//if(e.getSource() == open)
//if(e.getSource() == save)
//if(e.getSource() == saveas)
if(e.getSource() == exit)
System.exit(0);
}
}
}
然后, setLineWrap(true)
最后将这个textArea加入到一个JScrollPane里.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;import javax.swing.*;public class Notepad implements ActionListener {
private JTextArea jta = new JTextArea(20, 40);
private JFrame jf = new JFrame("NotePad");
private String copy = "";
private JDialog jd = new JDialog(jf,"查找");
private JTextField jtf = new JTextField(20);
private String resu = "";
private String tempResu = "";
private int p = 0;
private String file = "";
public Notepad() {
JMenuBar jmb = new JMenuBar();
JMenu jm1 = new JMenu("文件");
JMenu jm2 = new JMenu("编辑");
JMenu jm3 = new JMenu("帮助");
String[] label = { "新建", "打开", "保存", "另存为", "退出", "撤销", "剪切", "复制",
"粘贴", "删除", "查找", "替换", "全选", "关于记事本" };
JMenuItem[] jmi = new JMenuItem[label.length];
for (int i = 0; i < jmi.length; i++) {
jmi[i] = new JMenuItem(label[i]);
jmi[i].addActionListener(this);
if (i < 5) {
jm1.add(jmi[i]);
} else if (i < 13) {
jm2.add(jmi[i]);
} else {
jm3.add(jmi[i]);
}
}
jm1.insertSeparator(2);
jm2.insertSeparator(1);
jm2.insertSeparator(8);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3); JPanel jp = new JPanel();
jp.add(jtf);
JButton jb1 = new JButton("查询");
jb1.addActionListener(this);
jp.add(jb1);
jd.add(jp);
jd.pack();
jf.setJMenuBar(jmb);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(new JScrollPane(jta));
jf.pack();
jf.setVisible(true);
jf.validate();
} public void actionPerformed(ActionEvent e) {
String comm = e.getActionCommand();
if (comm.equals("新建")) {
jta.setText("");
} else if (comm.equals("打开")) {
FileDialog fd = new FileDialog(jf, "请选择要打开的文件", FileDialog.LOAD);
fd.setVisible(true);
System.out.println(fd.getFile());
if (fd.getFile() != null) {
file = fd.getDirectory() + fd.getFile();
try {
FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[1024];
int count = 0;
String resu = "";
while ((count = fis.read(b)) != -1) {
resu = resu + new String(b, 0, count);
}
fis.close();
System.out.println(resu);
jta.setText(resu);
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else if (comm.equals("保存")) {
String tempFile = "c:\\t.txt";
if(!file.equals("")){
tempFile = file;
}
String temp = jta.getText();
try {
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(temp.getBytes());
fos.close();
} catch (Exception e1) {
e1.printStackTrace();
}
} else if (comm.equals("另存为")) {
FileDialog fd = new FileDialog(jf, "请选择要打开的文件", FileDialog.SAVE);
fd.setVisible(true);
if (fd.getFile() != null) {
file = fd.getDirectory() + fd.getFile();
String temp = jta.getText();
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(temp.getBytes());
fos.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
else if (comm.equals("退出")) {
System.exit(0);
}else if (comm.equals("复制")) {
jta.copy();
} else if (comm.equals("粘贴")) {
copy = jta.getText();//为了撤销用
jta.paste();
} else if (comm.equals("剪切")) {
copy = jta.getText();
jta.cut();
} else if (comm.equals("全选")) {
jta.selectAll();
} else if (comm.equals("撤销")) {
jta.setText(copy);
} else if (comm.equals("查找")) {
jd.setVisible(true);
resu = jta.getText();
tempResu = resu;
}else if (comm.equals("查询")) {
// jd.setVisible(false);
String temp = jtf.getText();
//tempResu为子字符串,resu是全部
int begin = tempResu.indexOf(temp);
//System.out.println(begin);
if (begin != -1) {
jta.select(p + begin, p + begin + temp.length());
p = p + begin + temp.length();
tempResu = resu.substring(p);
System.out.println(p);
}else {
//重新开始查找
tempResu = jta.getText();
p=0;
}
System.out.println(resu); }
} public static void main(String[] args) {
new Notepad();
System.out.println("main");
}}
不需要加监听,只要将TextArea的一个对象作为JScrollPane类构造器的参数,
JTextArea jta = new JTextArea(20, 40);
new JScrollPane(jta);
以下摘自《JAVA_API》
setLineWrap
public void setLineWrap(boolean wrap)设置文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。当策略更改时,将激发 PropertyChange 事件("lineWrap")。此属性默认为 false。 参数:
wrap - 指示是否应该换行
另请参见:
getLineWrap()但对于上面所说的当行的长度大于所分配的长度,所分配的长度指的是什么?
一开始我认为是列数,但通过setColumns()函数设置后,仍然不是按照所设置的列数换行!
所以我认为这个长度是值得该控件的宽度!仅供参考!