Как остановить закрытие JDialog при нажатии клавиши Enter? - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь остановить закрытие моего JDialog при нажатии клавиши Enter.Я уже пытался использовать 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 голосов
/ 31 декабря 2018

И вы забыли удалить ...

getRootPane().setDefaultButton(okButton);

Это ...

Bad layout

- вот почему вы неиспользовать нулевые макеты

0 голосов
/ 01 января 2019

удалить эту строку getRootPane (). SetDefaultButton (okButton);должно работать :) 1001 *

0 голосов
/ 31 декабря 2018

Установите фокусируемый метод или что-то вроде этого, которое фокусируется на false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...