昨天刚接触J2SE,想通过编写一个记事本来得到进一步的学习
但是在编写替换窗口的时候出现了问题不知道图片发上来没有,替换窗口是照着WIN7的记事本做的,有两个TextField,tf1和tf2,但是我用tf1.getText(),读出来是空字符串
不知道是什么原因而在另外一个窗口(查找的窗口,也是照着WIN7做的)中有一个TextField,tf,我用tf.getText()却能成功的读出里面的字符串。还有就是这些东西我都是自己手写的,用的是Eclips,听说JB上有种方法叫“拖”,我不知道是怎么拖的请教一下Eclipse里面有同样的方法吗?

解决方案 »

  1.   

    参考一个简单的import java.awt.FileDialog;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea; /** 作一下记事本,包括菜单:
     文件:新建/打开/保存/另存/退出
     编辑:撤销/剪切/复制/粘贴/删除/查找/替换/全选
     帮助:关于记事本
     */
    public class Notepad implements ActionListener{
    JFrame jf = new JFrame("记事本");
    JTextArea jta = new JTextArea(10,20);//记事本,显示纯文本的多行区域

    public Notepad(){
    String[] menuLabel ={"文件", "编辑","帮助"};
    String[][] miLabel ={{"新建", "" ,  "打开",  "保存",  "另存","" , "退出"},
    {"撤销",  "剪切",  "复制",  "粘贴", " 删除", "","查找",  "替换", "" ,"全选"}, {" 关于记事本"} };
    JMenuBar jmb = new JMenuBar();
    for(int i=0;i<menuLabel.length;i++){
    JMenu jm = new JMenu(menuLabel[i]);
    jmb.add(jm);
      for(int j=0;j<miLabel[i].length;j++){
      if("".equals(miLabel[i][j])){
      jm.addSeparator();
      }else{
      JMenuItem jmi = new JMenuItem(miLabel[i][j]);
      jm.add(jmi);
      jmi.addActionListener(this);
      }
    }
      }
    jf.setJMenuBar(jmb);//JFrame加菜单栏时用setJmenuBar(),不用add
    jf.add(new JScrollPane(jta));//加滚动条
    jf.setLocation(300,300);//设计出现的位置 
    jf.setSize(400,400);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
    String comm = e.getActionCommand();
    if("新建".equals(comm)){
    jta.setText("");
    }else if("打开".equals(comm)){
    //FileDialog 类显示一个对话框窗口,用户可以从中选择文件
    //由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,
    //它将阻塞其余应用程序,直到用户选择一个文件
    FileDialog fd = new FileDialog(jf,"请选择要打开的文件",FileDialog.LOAD);
    fd.setVisible(true);
    //fd.show();

    }else if("保存".equals(comm)){

    }else if("另存".equals(comm)){

    }else if("退出".equals(comm)){

    }else if("撤销".equals(comm)){

    }else if("剪切".equals(comm)){

    }else if("复制".equals(comm)){

    }else if("粘贴".equals(comm)){

    }else if("删除".equals(comm)){

    }else if("查找".equals(comm)){

    }else if("替换".equals(comm)){

    }else if("全选".equals(comm)){

    }else{//关于记事本

    }
    }
    public static void main(String[] args) {
    new Notepad();
    }
    }
      

  2.   

    郁闷,太小了,反正就是跟WINDOWS替换的窗口一样
    怎么会读不出来啊
      

  3.   

    import javax.swing.*;import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.util.Date;
    public class NewBox implements ActionListener,ItemListener{
    protected JFrame f=new JFrame("java笔记本");
    private JMenuBar mb=new JMenuBar();//创建菜单条对象
    private TextArea tf=new TextArea();//创建文本对象 //查找框组件
    private JFrame reserchframe=new JFrame("查找");
    private JTextField tf1=new JTextField();
    private Label label1=new Label("查找内容:",Label.LEFT);
    private Label label2=new Label("方向:",Label.LEFT);
    private JButton bt1=new JButton("查找下一个");
    private JButton bt2=new JButton("取消");
    private JCheckBox cb1=new JCheckBox("区分大小写");
    private ButtonGroup group1=new ButtonGroup();
    private JRadioButton rb1=new JRadioButton("向上");
    private JRadioButton rb2=new JRadioButton("向下");

    //替换框组件
    private JFrame changeframe=new JFrame("替换");
    private Label label3=new Label("替换为:",Label.LEFT);
    private JTextField tf2=new JTextField();
    private JTextField tf3=new JTextField();
    private JButton bt3=new JButton("替换");
    private JButton bt4=new JButton("替换全部");
    private JButton bt5=new JButton("查找下一个");
    private JButton bt6=new JButton("取消");
    private JCheckBox cb2=new JCheckBox("区分大小写");
    private Label label4=new Label("查找内容:",Label.LEFT);

    //创建菜单
    private JMenu fileM=new JMenu("文件");
    private JMenu editM=new JMenu("编辑");
    private JMenu toolsM=new JMenu("格式");
    private JMenu helpM=new JMenu("帮助");
    //文件
    private JMenuItem newnew=new JMenuItem("新建");
    private JMenuItem open=new JMenuItem("打开");
    private JMenuItem save=new JMenuItem("保存");
    private JMenuItem saveto=new JMenuItem("另存为");
    private JMenuItem paper=new JMenuItem("页面设置");
    private JMenuItem printer=new JMenuItem("打印");
    private JMenuItem end=new JMenuItem("退出");
    //编辑
    private JMenuItem undo=new JMenuItem("撤消");
    private JMenuItem cut=new JMenuItem("剪切");
    private JMenuItem copy=new JMenuItem("复制");
    private JMenuItem paste=new JMenuItem("粘贴");
    private JMenuItem delate=new JMenuItem("删除");
    private JMenuItem reserch=new JMenuItem("查找");
    private JMenuItem next=new JMenuItem("查找下一个");
    private JMenuItem change=new JMenuItem("替换");
    private JMenuItem turnto=new JMenuItem("转到");
    private JMenuItem all=new JMenuItem("全选");
    private JMenuItem time=new JMenuItem("时间/日期");
    //格式
    private JCheckBox linefeed=new JCheckBox("自动换行");
    private JMenuItem script=new JMenuItem("字体");
    //帮助
    private JMenuItem readme=new JMenuItem("关于记事本"); private String str,strrec;
    private boolean reget=true;
    private boolean pd=true;//判断查找方向,false为向前,true为向后
    private boolean pd2=false,kprf=false;//判断是否有选择到
    private boolean pd3=true;//是否区分大小写

    public NewBox()
    {
    BorderLayout ff=new BorderLayout();
    f.setLayout(ff);
    //添加文件菜单
    mb.add(fileM);
    fileM.add(newnew);
    fileM.add(open);
    fileM.add(save);
    fileM.add(saveto);
    fileM.addSeparator();
    fileM.add(paper);
    fileM.add(printer);
    fileM.addSeparator();
    fileM.add(end);
    //添加编辑菜单
    mb.add(editM);
    editM.add(undo);
    editM.addSeparator();
    editM.add(cut);
    editM.add(copy);
    editM.add(paste);
    editM.add(delate);
    editM.addSeparator();
    editM.add(reserch);
    editM.add(next);
    editM.add(change);
    editM.add(turnto);
    editM.addSeparator();
    editM.add(all);
    editM.add(time);
    //添加格式菜单
    mb.add(toolsM);
    toolsM.add(linefeed);
    toolsM.add(script);
    //添加帮助菜单
    mb.add(helpM);

    //动作监听器
    //文件
    end.addActionListener(this);

    //编辑
    copy.addActionListener(this);
    paste.addActionListener(this);
    delate.addActionListener(this);
    time.addActionListener(this);
    //查找
    reserch.addActionListener(this);
    bt1.addActionListener(this);
    bt2.addActionListener(this);
    rb1.addItemListener(this);
    rb2.addItemListener(this);
    cb1.addItemListener(this);
    next.addActionListener(this);
    //替换
    change.addActionListener(this);
    bt5.addActionListener(this);
    bt3.addActionListener(this);
    bt4.addActionListener(this);
    bt6.addActionListener(this);
    cb2.addItemListener(this);

    helpM.add(readme);
    f.setJMenuBar(mb);
    f.add(tf);
    //设置出现位置及大小
    //主文本
    f.setBounds(100,100,600,400);
    f.setVisible(true);
    //查找
    reserchframe.setLayout(null);
    reserchframe.setBounds(150,150,400,130);
    reserchframe.setVisible(false);
    label1.setBounds(0,0,60,30);
    reserchframe.add(label1);
    tf1.setBounds(60,5,180,25);
    reserchframe.add(tf1);
    bt1.setBounds(280,5,100,25);
    reserchframe.add(bt1);
    bt2.setBounds(280,35,100,25);
    reserchframe.add(bt2);
    cb1.setBounds(0,50,100,25);
    cb1.setSelected(true);
    reserchframe.add(cb1);
    group1.add(rb1);
    group1.add(rb2);
    rb1.setBounds(120,65,60,25);
    reserchframe.add(rb1);
    rb2.setBounds(180,65,60,25);
    rb2.setSelected(true);
    pd=true;
    reserchframe.add(rb2);
    label2.setBounds(155,40,50,28);
    reserchframe.add(label2);

    //替换

    changeframe.setLayout(null);
    changeframe.setBounds(150,150,400,200);
    changeframe.setVisible(false);
    label4.setBounds(0,5,60,25);
    changeframe.add(label4);
    label3.setBounds(0,35,60,25);
    changeframe.add(label3);
    tf2.setBounds(60,5,180,25);
    changeframe.add(tf2);
    tf3.setBounds(60,35,180,25);
    changeframe.add(tf3);
    cb2.setBounds(0,100,100,25);
    cb2.setSelected(true);
    changeframe.add(cb2);
    bt5.setBounds(280,5,100,25);
    changeframe.add(bt5);
    bt3.setBounds(280,35,100,25);
    changeframe.add(bt3);
    bt4.setBounds(280,65,100,25);
    changeframe.add(bt4);
    bt6.setBounds(280,95,100,25);
    changeframe.add(bt6);
    //窗口监听器
    MyWindowAdapter mwa=new MyWindowAdapter(this);
    f.addWindowListener(mwa);
    reserchframe.addWindowListener(mwa);
    }

    public void actionPerformed(ActionEvent e)
    {
    //文件
    if (e.getSource().equals(end))
    {
    System.exit(0);
    }

    //编辑
    if (e.getSource().equals(copy))
    {
    str=tf.getSelectedText();
    }

    if (e.getSource().equals(paste))
    {
    tf.append(str);
    }

    if (e.getSource().equals(delate))
    {
    tf.replaceRange("",tf.getSelectionStart(),tf.getSelectionEnd());
    }

    if (e.getSource().equals(time))
    {
    tf.append(""+new Date());
    }

    if (e.getSource().equals(reserch))
    {
    reserchframe.setVisible(true);
    }

    if (e.getSource().equals(bt1)||e.getSource().equals(next)||e.getSource().equals(bt5))
    {
    init(tf1);
    }

    if (e.getSource().equals(bt2)||e.getSource().equals(bt6))
    {
    kprf=false;
    reserchframe.setVisible(false);
    changeframe.setVisible(false);
    }

    if (e.getSource().equals(change))
    {
    changeframe.setVisible(true);
    }

    if (e.getSource().equals(bt3))
    {
    if (kprf==true)
    {
    String str2;
    str2=tf2.getText();
    tf.replaceRange(str2,tf.getSelectionStart(),tf.getSelectionEnd());
    }
    else
    {
    JOptionPane.showMessageDialog((Component)null,"找不到对应字符!","记事本",JOptionPane.WARNING_MESSAGE);
    }
    }

    if (e.getSource().equals(bt4))
    {
    while(true)
    {
    init(tf2);
    if (kprf==true)
    {
    String str2;
    str2=tf3.getText();
    tf.replaceRange(str2,tf.getSelectionStart(),tf.getSelectionEnd());
    }
    else
    {
    JOptionPane.showMessageDialog((Component)null,"替换完毕!","记事本",JOptionPane.WARNING_MESSAGE);
    break;
    }
    }
    }
    }
    public void itemStateChanged(ItemEvent e) 
    {
    if (e.getItemSelectable().equals(rb1))
    {
    pd=false;
    reget=true;
    pd2=false;
    }

    if (e.getItemSelectable().equals(rb2))
    {
    pd=true;
    reget=true;
    pd2=false;
    }

    if (e.getItemSelectable().equals(cb1)||e.getItemSelectable().equals(cb2))
    {
    if (pd3==true) pd3=false;
    else pd3=true;
    }
    }

    public void init(JTextField tfx)
    {
    kprf=true;
    if (reget==true) 
    {
    str=tf.getText();
    strrec=str;
    reget=false;
    }
    String str1=tfx.getText();
    if (pd3==false)
    {
    str=str.toLowerCase();
    str1=str1.toLowerCase();
    }
    System.out.println("k"+tfx.getText());
    int location,k;
    if (pd==false) location=str.lastIndexOf(str1);
    else location=str.indexOf(str1);
    if (location==-1)
    {
    reget=true;
    kprf=false;
    JOptionPane.showMessageDialog((Component)null,"找不到对应字符!","记事本",JOptionPane.WARNING_MESSAGE);
    }
    if (pd==false) tf.select(location,location+str1.length());
    else if (pd2==false)
    {
    tf.select(location,location+str1.length());
    pd2=true;
    }
    else
    {
    k=tf.getSelectionEnd();
    tf.select(k+location,k+location+str1.length());
    }
    tf.requestFocus();//获取焦点
    if (pd==false) str=str.substring(0,tf.getSelectionStart());
    else if (pd2==true)
    {
    int temp=strrec.length()-str.length();
    str=str.substring(tf.getSelectionEnd()-temp,str.length()); 
    }
    } public static void main(String[] args)
    {
    new NewBox();
    }
    }
    没办法了新手就是新手代码在这,有没好心人帮我看看咋回事