按下Enter键后如何停止JDialog关闭?

时间:2018-12-31 06:41:34

标签: java swing

按Enter键,我试图停止关闭JDialog。我已经尝试使用getRootPane().setDefaultButton(null);,但仍然无法正常工作。我正在从主JDialog中为我的JFrame调用此构造函数。这是我的代码:

public class CustomSaleDialog extends JDialog {

    private final JPanel contentPanel = new JPanel();
    private JTextField txtScanBarcode;
    private JTextField txtNumSold;
    private String barcode;
    private int numTickets;

    public void setNumTickets(int num) {
        numTickets = num;
    }

    public void setBarCode(String code) {
        barcode = code;
    }

    public int getNumTickets() {
        return numTickets;
    }

    public String getBarCode() {
        return barcode;
    }

    public CustomSaleDialog(JFrame f) {
        getRootPane().setDefaultButton(null); //This is what I tried
        setTitle("Custom Sale");
        setBounds(100, 100, 450, 300);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setModalityType(ModalityType.APPLICATION_MODAL);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        contentPanel.setLayout(null);


        {
            JLabel lblMakeACustom = new JLabel("Make a Custom Sale");
            lblMakeACustom.setFont(new Font("Tahoma", Font.PLAIN, 25));
            lblMakeACustom.setHorizontalAlignment(SwingConstants.CENTER);
            lblMakeACustom.setBounds(10, 11, 414, 44);
            contentPanel.add(lblMakeACustom);
        }
        {
            JLabel lblScanTicket = new JLabel("Scan Ticket");
            lblScanTicket.setFont(new Font("Tahoma", Font.PLAIN, 20));
            lblScanTicket.setBounds(20, 73, 102, 20);
            contentPanel.add(lblScanTicket);
        }
        {
            JLabel lblNumberOfTickets = new JLabel("Number of Tickets Being Sold");
            lblNumberOfTickets.setFont(new Font("Tahoma", Font.PLAIN, 20));
            lblNumberOfTickets.setBounds(20, 136, 262, 25);
            contentPanel.add(lblNumberOfTickets);
        }
        {
            txtScanBarcode = new JTextField();
            txtScanBarcode.setBounds(132, 73, 284, 20);
            contentPanel.add(txtScanBarcode);
            txtScanBarcode.setColumns(10);
        }
        {
            txtNumSold = new JTextField();
            txtNumSold.setBounds(292, 141, 124, 20);
            contentPanel.add(txtNumSold);
            txtNumSold.setColumns(10);
        }
        {
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPane, BorderLayout.SOUTH);
            {
                JButton okButton = new JButton("OK");
                okButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        barcode = txtScanBarcode.getText();
                        String numTickets = txtNumSold.getText();
                        int numTicketsInt = 0;
                        if (barcode.length() > 0
                                && numTickets.matches("[0-9]+")
                                && numTickets.length() >= 1) {
                            numTicketsInt = Integer.parseInt(numTickets);
                            setBarCode(barcode);
                            setNumTickets(numTicketsInt);
                        }
                        setVisible(false);
                        dispose();
                    }
                });
                okButton.setActionCommand("OK");
                buttonPane.add(okButton);
                getRootPane().setDefaultButton(okButton);
            }
            {
                JButton cancelButton = new JButton("Cancel");
                cancelButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        setVisible(false);
                        dispose();
                    }
                });
                cancelButton.setActionCommand("Cancel");
                buttonPane.add(cancelButton);
            }
        }


        setLocationRelativeTo(f);
        setVisible(true);
    }

}

3 个答案:

答案 0 :(得分:2)

您忘记删除...

getRootPane().setDefaultButton(okButton);

这个...

Bad layout

这就是为什么您不使用空布局

的原因

答案 1 :(得分:0)

设置可聚焦的方法或类似的方法,将其聚焦为false。

答案 2 :(得分:0)

删除此行getRootPane()。setDefaultButton(okButton);它应该工作:)