gpt4 book ai didi

java - JDialog 上的 stopCellEditing

转载 作者:行者123 更新时间:2023-12-01 14:07:49 26 4
gpt4 key购买 nike

我的问题与此类似:JTable Cell Update doesn't work .

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

我希望在按下“确定”按钮后立即通知容器我已完成编辑。简而言之,我想明确具有类似于 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();
}
});
}
}

关于java - JDialog 上的 stopCellEditing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18757214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com