簡體   English   中英

按下Enter鍵后如何停止JDialog關閉?

[英]How to stop JDialog from closing when you hit the Enter key?

我試圖按Enter鍵阻止JDialog關閉。 我已經嘗試使用getRootPane().setDefaultButton(null); 但它仍然無法正常工作。 我從主JFrame為我的JDialog調用此構造函數。 這是我的代碼:

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);
    }

}

而您忘記刪除...

getRootPane().setDefaultButton(okButton);

這個...

布局不良

這就是為什么您不使用空布局的原因

設置可聚焦的方法或類似的方法,將其聚焦為false。

刪除此行getRootPane()。setDefaultButton(okButton); 它應該工作:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM