Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 仅在ActionListener之后返回函数_Java_Swing - Fatal编程技术网

Java 仅在ActionListener之后返回函数

Java 仅在ActionListener之后返回函数,java,swing,Java,Swing,我在Java中有这个函数: public int[] getProperties() { properties = new JFrame(); properties.setSize(400, 200); properties.setVisible(true); properties.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); propertiesPanel = new JPanel();

我在Java中有这个函数:

public int[] getProperties() {
    properties = new JFrame();
    properties.setSize(400, 200);
    properties.setVisible(true);
    properties.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    propertiesPanel = new JPanel();
    propertiesPanel.setLayout(new GridBagLayout());
    GridBagConstraints constraints = new GridBagConstraints();
    constraints.insets = new Insets(5, 5, 10, 5);
    properties.add(propertiesPanel);

    heightText = new JLabel("Height (squares)");
    constraints.gridx = 0;
    constraints.gridy = 0;
    propertiesPanel.add(heightText, constraints);
    heightField = new JTextField(5);
    heightField.setText(Integer.toString(board.getHeight()));
    constraints.gridx = 1;
    constraints.gridy = 0;
    propertiesPanel.add(heightField, constraints);

    widthText = new JLabel("Width (squares)");
    constraints.gridx = 0;
    constraints.gridy = 1;
    propertiesPanel.add(widthText, constraints);
    widthField = new JTextField(5);
    widthField.setText(Integer.toString(board.getWidth()));
    constraints.gridx = 1;
    constraints.gridy = 1;
    propertiesPanel.add(widthField, constraints);

    multText = new JLabel("Pixels per Square");
    constraints.gridx = 0;
    constraints.gridy = 2;
    propertiesPanel.add(multText, constraints);
    multField = new JTextField(5);
    multField.setText(Integer.toString(board.getMultiplier()));
    constraints.gridx = 1;
    constraints.gridy = 2;
    propertiesPanel.add(multField, constraints);

    confirm = new JButton("Ok");
    constraints.gridx = 1;
    constraints.gridy = 3;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    propertiesPanel.add(confirm, constraints);

    final int[] dimensions = new int[3];
    confirm.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            dimensions[0] = Integer.parseInt(heightField.getText());
            dimensions[1] = Integer.parseInt(widthField.getText());
            dimensions[2] = Integer.parseInt(multField.getText());
            properties.dispose();
        }
    });

    return dimensions;
}

(JFrame、
JPanel
JLabel
s和
JTextField
s都在其他地方定义)。但是,函数总是返回如下数组:
{0,0,0}
,因为
确认
从未立即按下。那么,如何仅在按下
确认后返回
维度

您可以通过以下两种方法之一解决此问题:

  • 阻止程序的执行,直到用户输入一组维度
这可以通过将表单包装在一个模式中,显示JDialog,等待用户关闭JDialog,然后检查
widthField
heightField
multField
的内容来实现

  • 当用户输入一组维度时,使用某种回调来通知用户

这可以通过将某种侦听器类作为参数传递给
getProperties
,然后从
ActionListener

内部调用它来实现。请清除上下文,然后使用它来实现。。。。