如何使用java swing只打开一个查找和替换对话框?

时间:2016-08-17 07:25:22

标签: java swing awt

我使用Java AWT和Swing API创建了一个记事本应用程序。我能够打开,保存并完成所有操作,我还创建了一个Jdialog来将查找和替换对话框显示到我的记事本应用程序中。

  

我的问题是,当我点击编辑 - >查找时,我会多次点击对话框点击查找按钮,如何只获得一次?

final JDialog frDialog = new JDialog();
frDialog.setLayout(new GridLayout(3,4));
//frDialog.setModal(true);
frDialog.setVisible(true);
frDialog.requestFocus();

我不想使用setModal方法,我是一个更新鲜的人,所以有人能建议我一个更好的方法来防止重复对话框吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

您可以创建一个模式JDialog,其中包含捕获搜索和替换字符串所需的选项。并提供匹配案例,正则表达式等选项的复选框。为JButtonFind NextReplaceReplace All添加Cancel按钮。为这些按钮编写适当的逻辑,最后从记事本的actionPerformed方法中显示对话框。这应该为你提供一个很好的起点来完成你正在寻找的东西。

  

<强>更新

使用它来抢先一步:

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Snippet {
    public static void main(String[] args) {
        JFrame notepadFrame = createFrame();
        JDialog frDialog = new JDialog(notepadFrame);

        frDialog.setLayout(new GridLayout(3,4));

        JTextField txtFind = new JTextField();
        JTextField txtReplace = new JTextField();
        JButton btnFind = new JButton("Find");
        JButton btnReplace = new JButton("Replace");
        JButton btnReplaceAll = new JButton("Replace All");
        frDialog.add(new JLabel("Find: "));
        frDialog.add(txtFind);
        frDialog.add(new JLabel(""));
        frDialog.add(btnFind);
        frDialog.add(new JLabel("Replace with: "));
        frDialog.add(txtReplace);
        frDialog.add(new JLabel(""));
        frDialog.add(btnReplace);
        frDialog.add(new JLabel(""));
        frDialog.add(new JLabel(""));
        frDialog.add(new JLabel(""));
        frDialog.add(btnReplaceAll);

        frDialog.pack();
        frDialog.setVisible(true);

        show(notepadFrame);

    }

    public static JFrame createFrame(){
        JFrame frame = new JFrame("Notepad Frame");
        frame.setSize(600,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JTextArea());
        return frame;
    }

    public static void show(JFrame frame) {
        frame.setVisible(true);
    }
}

希望这有帮助!