Как заставить JButton узнать, на какой панели она была нажата? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь смоделировать систему проката автомобилей в графическом интерфейсе. Поскольку я не очень разбираюсь в компонентах Swing, я решил создать список автомобилей с помощью GridBagLayout.

Каждый ряд имеет разные панели, каждая из которых имеет свои цены аренды и названия автомобилей.

Карлистские

Кнопка «Подробности» доступна для всех панелей в списке. Я ищу способ, которым «Детали» получают заголовок и текст цены с панели, где она была нажата, а затем сохраняет их внутри переменных.

до сих пор всякий раз, когда я нажимаю на него, он только сохраняет и отправляет текст с последней панели в списке, даже если я нажал первую кнопку в списке.

CarDetails

Это событие кнопки:

JButton btnNewButton = new JButton("details");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String Car, price;
        Car = Name.getText();
        price = Price.getText();
        Main.add(new CarD(Car,price), "2");
        cl.show(Main, "2");
        add.setVisible(false);
    }
});

EDIT:

Следуя примеру camickr, все, что осталось, - это получить метки из родительской панели, используя место, где они находятся внутри нее.

        JButton btnNewButton = new JButton("Details");
            btnNewButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String Car, price;
                    JButton button = (JButton)e.getSource();
                    JPanel panel = (JPanel)button.getParent();
                    JLabel N = (JLabel)panel.getComponentAt(202, 62);
                    JLabel P = (JLabel)panel.getComponentAt(202, 24);

                    Car = N.getText();
                    price = P.getText();
                    Main.add(new CarD(Car,price), "2");
                    cl.show(Main, "2");
                    add.setVisible(false);
                }
            });

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

В ActionListener вашей кнопки «Подробности» вы можете получить кнопку от ActionEvent и панель от кнопки:

JButton button = (JButton)e.getSource();
JPanel panel = (JPanel)button.getParent();
0 голосов
/ 03 мая 2019

В ActionListener попробуйте это:

    public void actionListener(ActionEvent evt)
    {
       if(evt.getSource()==b1)  // b1 is button variable
       {    
         //code
         // this will run if you click on b1 button
       }
       if(evt.getSource()==b2)  // b2 is another button variable
       {    
           //code
           // this will run if you click on b2 button
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...