Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于JDialog的stopcell编辑_Java_Swing - Fatal编程技术网

Java 基于JDialog的stopcell编辑

Java 基于JDialog的stopcell编辑,java,swing,Java,Swing,我的问题与此类似: 但是,我使用的是JDialog,而不是上面链接中指定的JTable。我有一个扩展JDialog的自定义类。我在该对话框中将JEditorPane用作文本组件,并创建简单的确定、取消按钮。现在的问题是,当我在JedorPane中输入某个内容并按下OK按钮时,该值不会应用于文本组件,直到我将焦点移出JDialog或点击tab/enter 我希望在按下OK按钮后,容器会被通知我已完成编辑。简言之,我想明确地拥有一个类似于stopCellEditing()的功能。我如何才能做到这一点

我的问题与此类似:

但是,我使用的是JDialog,而不是上面链接中指定的JTable。我有一个扩展JDialog的自定义类。我在该对话框中将JEditorPane用作文本组件,并创建简单的确定、取消按钮。现在的问题是,当我在JedorPane中输入某个内容并按下OK按钮时,该值不会应用于文本组件,直到我将焦点移出JDialog或点击tab/enter


我希望在按下OK按钮后,容器会被通知我已完成编辑。简言之,我想明确地拥有一个类似于stopCellEditing()的功能。我如何才能做到这一点?

看看这个例子,它似乎工作正常,并且做了与您描述的相同的事情:

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class TestEditorPaneDialog {

    public void init() {
        final JFrame frame = new JFrame();
        JButton clickMe = new JButton("Click me");
        clickMe.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                showDialog(frame);
            }
        });
        frame.add(clickMe);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        showDialog(frame);
    }

    private void showDialog(final JFrame frame) {
        final JDialog dialog = new JDialog(frame, true);
        final JEditorPane pane = new JEditorPane();
        pane.setText("Type something here");
        JPanel south = new JPanel();
        JPanel buttons = new JPanel(new GridLayout(1, 0, 10, 10));
        JButton ok = new JButton("OK");
        ok.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.dispose();
                JOptionPane.showMessageDialog(frame, "You have typed in: " + pane.getText());
            }
        });
        JButton cancel = new JButton("Cancel");
        cancel.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.dispose();
            }
        });
        buttons.add(ok);
        buttons.add(cancel);
        south.add(buttons);
        dialog.add(new JScrollPane(pane));
        dialog.add(south, BorderLayout.SOUTH);
        dialog.setSize(250, 150);
        dialog.setLocationRelativeTo(frame);
        dialog.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestEditorPaneDialog().init();
            }
        });
    }
}
“我该怎么做?”你提供了一个证明问题的答案……因为我觉得这听起来完全错了。在文本组件中键入的内容将在编写文档时提交给文档。。。