Я хочу добавить JPanel в мой GUI, который будет иметь несколько кнопок, скажем, b1, b2, b3. Эта JPanel будет добавлена динамически, пока приложение уже запущено, нажатием кнопки, скажем, b. Когда я отображаю JPanel, кнопка b не будет работать, пока не будет нажата одна из кнопок b1, b2, b3.
Я создал класс JPanel, который содержит кнопки b1, b2, b3, и добавил обработчики событий, а внутри обработчика событий мыши для кнопки b я создал объект jPanel. Итак, JPanel отображается, но кнопка b не ожидает ответа от b1, b2 & b3.
Остальной код события кнопки b будет зависеть от того, какой выбор сделан между b1, b2 и b3. Таким образом, эта строка кода будет приостановлена, пока не будет сделан выбор.
Как я могу остановить кнопку b, пока не будет выбрана одна из кнопок?
Вот MCVE ...
1) Главный класс ...
package com.company;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new Frame();
frame.setVisible(true);
}
}
2) Класс каркаса ...
import java.awt.event.MouseEvent;
public class Frame extends JFrame {
public Frame() {
super.setLayout(new FlowLayout());
JButton b = new JButton("Click Me!!");
b.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Panel panel = new Panel();
Frame.super.add(panel);
// After this I have more handling code, which depends on which button was chosen.
// But I cant stop the execution at this point and make it wait for a choice.
Frame.super.revalidate();
}
});
super.add(b);
super.validate();
}
}
3) Класс панели ...
package com.company;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Panel extends JPanel {
public Panel() {
super.setLayout(new FlowLayout());
super.setBackground(Color.BLACK);
MouseAdapter listener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JButton button = (JButton) e.getSource();
// return button ??
// return the name of the button to the event handler of the button b in the JFrame for further execution.
}
};
JButton b1 = new JButton("option 1");
b1.addMouseListener(listener);
JButton b2 = new JButton("option 2");
b2.addMouseListener(listener);
JButton b3 = new JButton("option 3");
b3.addMouseListener(listener);
super.add(b1);
super.add(b2);
super.add(b3);
}
}
Части, в которые я хочу добавить некоторый код, комментируются, и объясняется функциональность, которую я хочу добавить.