0

我在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, JLabels 和JTextFields 都在其他地方定义)。但是,该函数总是返回一个像这样的数组:{0, 0, 0}因为confirm从不立即按下。dimensions那么,只有在confirm按下后我才能返回?

4

1 回答 1

0

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

  • 阻止程序的执行,直到用户输入一组维度

这可以通过将表单包装在模态JDialog中来完成,显示该 JDialog,等待用户关闭 JDialog,然后检查widthField heightFieldand的内容multField

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

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

于 2013-05-24T18:43:30.483 回答