Java 仅在ActionListener之后返回函数
我在Java中有这个函数: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();
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
内部调用它来实现。请清除上下文,然后使用它来实现。。。。