我编的记事本,然后下面文本区写东西一行可以写无限,如何添加滚动条限制每行可输入的数目?需要加监听器吗?附源码
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);
}
}
}

解决方案 »

  1.   

    首先, 设置TextArea的宽度, setRows()
    然后, setLineWrap(true)
    最后将这个textArea加入到一个JScrollPane里.
      

  2.   

    package day20am;//package day11;
    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);
      

  3.   


    以下摘自《JAVA_API》
    setLineWrap
    public void setLineWrap(boolean wrap)设置文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。当策略更改时,将激发 PropertyChange 事件("lineWrap")。此属性默认为 false。 参数:
    wrap - 指示是否应该换行
    另请参见:
    getLineWrap()但对于上面所说的当行的长度大于所分配的长度,所分配的长度指的是什么?
    一开始我认为是列数,但通过setColumns()函数设置后,仍然不是按照所设置的列数换行!
    所以我认为这个长度是值得该控件的宽度!仅供参考!