Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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 swing窗体_Java_Macos_Swing_Key Events - Fatal编程技术网

按住键将中断java swing窗体

按住键将中断java swing窗体,java,macos,swing,key-events,Java,Macos,Swing,Key Events,我正在开发一个基本的JavaSwingUI应用程序,它似乎工作正常,除了我在使用我创建的表单时注意到的一个问题 问题是,当我在文本框中键入内容时,按下一个键似乎会破坏表单——也就是说,执行此操作后,文本框似乎不再接受任何输入。我发现很难相信这是JavaSwing组件发布的问题,但我也看不出它与我的代码有什么关系。以前有人见过类似的问题吗?如果相关的话,我使用的是带Intellij IDEA的OSX 我的表格定义如下: import java.awt.FlowLayout; import java

我正在开发一个基本的JavaSwingUI应用程序,它似乎工作正常,除了我在使用我创建的表单时注意到的一个问题

问题是,当我在文本框中键入内容时,按下一个键似乎会破坏表单——也就是说,执行此操作后,文本框似乎不再接受任何输入。我发现很难相信这是JavaSwing组件发布的问题,但我也看不出它与我的代码有什么关系。以前有人见过类似的问题吗?如果相关的话,我使用的是带Intellij IDEA的OSX

我的表格定义如下:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class LoginDialogMcve extends JFrame {

  protected JTextField stringEntry, dateEntry;

  public LoginDialogMcve() {
    super("Create Textbox");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new FlowLayout());

    this.stringEntry = new JTextField(5);
    add(this.stringEntry);

    this.dateEntry = new JTextField(5);
    add(this.dateEntry);

  }

  public static void main(String... args) {
    LoginDialogMcve me = new LoginDialogMcve();
    me.pack();
    me.setLocationByPlatform(true);
    me.setVisible(true);
  }
}

编辑:感谢您的反馈,这很可能不是Java的问题。可能和OSx有关。。。上传了使用mcve的简单示例,我的mcve运行良好。你自己测试看看

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
// import net.miginfocom.swing.MigLayout;

@SuppressWarnings("serial")
public class LoginDialogMcve extends JFrame {

    protected JTextField stringEntry, dateEntry;
    protected JLabel stringEntryLabel, dateEntryLabel;
    protected JButton print;
    protected Action validateAction;

    public LoginDialogMcve() {
        super("Create Textbox");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        // setLayout(new MigLayout("ins 10, gap 5",
        // "[][grow]",
        // "[][][]"));

        this.stringEntryLabel = new JLabel("Name:");
        add(this.stringEntryLabel);

        this.stringEntry = new JTextField(5);
        add(this.stringEntry);

        this.dateEntryLabel = new JLabel("Date:");
        add(this.dateEntryLabel);

        this.dateEntry = new JTextField(5);
        add(this.dateEntry);

        this.validateAction = new MyAction();

        this.print = new JButton(this.validateAction);
        add(this.print);

        getRootPane().getActionMap().put("validate", this.validateAction);
    }

    public static void main(String... args) {
        LoginDialogMcve me = new LoginDialogMcve();
        me.pack();
        me.setLocationByPlatform(true);
        me.setVisible(true);
    }

    public class MyAction extends AbstractAction {

        public MyAction() {
            super("Validate");
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // lots of irrelevant code
        }

    }

}

上述代码(显然删除了很多代码)是否充分再现了您的问题?仅此一项就足以向我们证明您的问题吗?为什么要在ActionMap中输入一个值而不在InputMap中输入相同的值呢?是的,就我所知,这个问题在任何swing文本框中都是可以重现的。特别是,它发生在调用actionPerformed之前,这就是为什么我认为该方法是不相关的。我认为我不需要inputMap,因为我触发操作的唯一输入是单击validate按钮。这有意义吗?如果不是,我将使用InputMap做什么?好的,在我自己尝试测试代码之后,包括在main方法中更改类的名称——我无法重现您的问题,这意味着您的代码目前还不够。建议将此问题搁置,直到发布有效的邮件。我可以用这个确切的代码复制。您可以按住字母键,观察输入,例如DDDD?对我来说,它会立即停止,我不能再使用表格了。我用我的MCVE试过了,但请注意,我们大多数人都没有MIG布局。我将把我的MCVE作为一个社区wiki发布在下面,这样你就可以自己测试它了。您使用什么操作系统/Swing jar?