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) должен быть последним оператором.

Другие вопросы по тегам