xiaoyin35 2022-02-17 18:55 采纳率: 75%
浏览 23
已结题

自制文本编辑器在新建自定义后缀名文件时无法弹出对话框或提交不了

package learn1;

import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import javax.swing.*;
import java.util.logging.*;

public class TextEditor extends JFrame {
    public boolean isNewFile = true;
    public boolean fixed = false;
    public String fileName = "无标题";
    public String fileSuffix = "txt";
    public final static Logger logger = Logger.getLogger("TELogger");
    
    public TextEditor(String fileName, String fileSuffix, boolean isNewFile) {
        logger.info("开始创建文本编辑器:文件名:" + fileName + "、后缀名:" + fileSuffix);
        this.fileName = fileName;
        this.fileSuffix = fileSuffix;
        this.isNewFile = isNewFile;
        
        Container c = getContentPane();
        
        final JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
        
        final JMenu fileMenu = new JMenu("文件(F)");
        menuBar.add(fileMenu);
        fileMenu.setMnemonic('F');
        
        final JMenuItem newItem = new JMenuItem("新建(N)");
        fileMenu.add(newItem);
        newItem.setMnemonic('N');
        newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK));
        newItem.addActionListener(new FileNew());
        
        final JMenuItem newcsItem = new JMenuItem("新建自定义后缀名文件(N)");
        fileMenu.add(newcsItem);
        newcsItem.setMnemonic('N');
        newcsItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK));
        newcsItem.addActionListener(new FileNewCS());
        
        final JMenuItem openItem = new JMenuItem("打开(O)");
        fileMenu.add(openItem);
        openItem.setMnemonic('O');
        openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
        openItem.addActionListener(new FileOpen());
        
        setSize(500, 300);
        setTitle("文本编辑器 - " + fileName + (fileSuffix == "txt" ? "" : ("." + fileSuffix)) + (fixed ? "*" : ""));
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        logger.info("完成创建");
    }
    
    public static class Creator {
        public Creator() {
            logger.info("创建启动器");
        }
        
        public TextEditor create() {
            logger.info("启动空白文本编辑器");
            return new TextEditor("无标题", "txt", true);
        }
    }
    
    public class FileNew implements ActionListener {
        public void actionPerformed(ActionEvent ae) {
            logger.info("创建新的txt文件");
            if (!TextEditor.this.isNewFile) {
                logger.info("启动新窗口");
                new TextEditor("无标题", "txt", true);
            }
        }
    }
    
    public class FileNewCS extends JDialog implements ActionListener {
        public String data = "txt";
        public boolean done = false;
        
        public FileNewCS() {
            super();
            logger.info("创建新选择后缀名弹窗");
            setTitle("输入自定义后缀名");
            setLayout(null);
            setBounds(0, 0, 280, 80);
            
            Container c = getContentPane();
            
            JLabel tip = new JLabel("输入自定义后缀名:.");
            tip.setBounds(0, 0, 150, 20);
            JTextField wr = new JTextField("txt");
            wr.setBounds(110, 0, 100, 20);
            JButton submit = new JButton("提交");
            submit.setBounds(210, 0, 60, 20);
            submit.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    data = wr.getText();
                    done = true;
                }
            });
            
            c.add(tip);
            c.add(wr);
            c.add(submit);
            
            setVisible(true);
        }
        
        public void actionPerformed(ActionEvent ae) {
            logger.info("新建自定义后缀名文件");
            String suffix = "txt";
            while (!done) {
                suffix = data;
            }
            new TextEditor("无标题", suffix, true);
        }
    }
    
    public class FileOpen implements ActionListener {
        public void actionPerformed(ActionEvent ae) {
            logger.info("打开文件");
            System.out.println("打开文件");
        }
    }
    
    public static void main(String args[]) {
        TextEditor f = new Creator().create();
        logger.info("主程序");
    }
}

我想让以上代码实现:
首先弹出“文本编辑器 - 无标题”然后点击“新建自定义后缀名文件”,弹出一个弹窗,然后显示输入后缀名,之后点击提交就能打开一个新的“文本编辑器 - 无标题.(输入的后缀名)”。
可是每次点击“新建自定义后缀名文件”前已经弹窗运行了,但是有时弹不出来,有时弹出来不能提交,而且很卡,关不掉。
求解法。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 2月25日
    • 创建了问题 2月17日