JDialog появляется без какого-либо содержания
Так что у меня возникла эта проблема с JDialog
появляются. Я знаю, что это не новый вопрос, но я все еще не могу понять концепцию EDT, параллелизма в Swing
, Я надеюсь, что кто-то может объяснить это простым способом (или указать мне на какой-то хорошо объясненный ресурс), как это работает и как именно я включу это в свой код, чтобы сделать JDialog
Работа.
Вот ресурс, который я читал в отношении параллелизма http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html
и вот мой код:
public class TestView {
JFrame frame = new JFrame("Testing Radio Dialogs");
JPanel mainPanel = new JPanel();
JButton button = new JButton("Click me");
String[] folderNames = { "Java", "Ruby", "C++", "HTML" };
JRadioButton r11 = new JRadioButton(folderNames[0]);
JRadioButton r22 = new JRadioButton(folderNames[1]);
JRadioButton r33 = new JRadioButton(folderNames[2]);
JRadioButton r44 = new JRadioButton(folderNames[3]);
public TestView() {
frame.add(mainPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(400, 400);
mainPanel.setLayout(new GridLayout(0, 1));
mainPanel.add(button);
button.addActionListener(new ButtonListener());
mainPanel.add(r11);
mainPanel.add(r22);
mainPanel.add(r33);
mainPanel.add(r44);
}
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ev) {
if (ev.getSource() == button) {
createPopup();
System.out.println("Button clicked!");
}
}
}
public void createPopup() {
JDialog dialog = new JDialog();
JPanel dialogPanel = new JPanel(new GridLayout(0,1));
dialogPanel.setSize(150, 150);
JRadioButton r1 = new JRadioButton("Ruby");
JRadioButton r2 = new JRadioButton("Java");
JRadioButton r3 = new JRadioButton("C++");
JRadioButton r4 = new JRadioButton("HTML");
ButtonGroup group = new ButtonGroup();
group.add(r1);
group.add(r2);
group.add(r3);
group.add(r4);
dialogPanel.add(r1);
dialogPanel.add(r2);
dialogPanel.add(r3);
dialogPanel.add(r4);
dialog.setVisible(true);
System.out.println("Popup created!");
}
}
Я просматривал похожие вопросы на разных форумах, но до сих пор не совсем понял концепцию. Буду признателен за любые отзывы по этому вопросу и мой код.
2 ответа
Нет проблем с параллелизмом или веткой рассылки, вы просто забыли добавить dialogPanel
к dialog
,
public void createPopup() {
//...
dialog.add(dialogPanel);
dialog.pack();
dialog.setVisible();
//...
}
Обратите внимание: когда вы создаете свой фрейм, вы добавляете компоненты в главную панель ПОСЛЕ того, как фрейм становится видимым. По умолчанию все компоненты имеют нулевой размер, поэтому рисовать нечего. Я был бы удивлен, если ваш код работает.
Порядок вашего кода должен быть:
panel.add(...);
panel.add(...);
frame.add(panel);
frame.pack();
frame.setVisible();
Все компоненты должны быть добавлены на панель, прежде чем сделать рамку видимой. Pack() вызовет менеджер раскладки, который отвечает за определение размера / расположения компонентов на панели.
SetVisible(true) должен быть последним оператором.