Кнопка ОК и строка не отображаются на JPanel - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать панель с напечатанным заявлением «Hello World!» и кнопку ОК. Ни то, ни другое не будет отображаться на панели, и я не знаю почему. Я начал с блока кода, который должен был создать пустое всплывающее окно. Пустое всплывающее окно отлично работало. Я не могу добавить строку или кнопку и увидеть их. Я пробовал вызвать paintComponent. Я попытался добавить контент на панель. Кто-нибудь знает, что мне не хватает?

Вот мой код


package painting;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SwingPaintDemo1 {
        
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
        
        private static class SwingPaintDemo extends JPanel{
            public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString("Hello World!", 20,30);
        }
        }
        
        private static void createAndShowGUI() {
            System.out.println("Created GUI on EDT? "+
                    SwingUtilities.isEventDispatchThread());
            JFrame f = new JFrame("Swing Paint Demo");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(250,250);
            f.setVisible(true);
            
            JButton okbutton = new JButton("OK");
            ButtonHandler listener = new ButtonHandler();
            okbutton.addActionListener(listener);
            
            SwingPaintDemo displayPanel = new SwingPaintDemo();
            JPanel content = new JPanel();
            content.setLayout(new BorderLayout());
            content.add(displayPanel, BorderLayout.CENTER);
            content.add(okbutton, BorderLayout.SOUTH);
        }
        
        private static class ButtonHandler implements ActionListener{
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        }
    }

1 Ответ

2 голосов
/ 10 июля 2020

Вы забыли добавить JPanel в JFrame. Просто добавьте следующую строку внизу вашего метода createAndShowGUI():

f.add(content);

Я бы также рекомендовал переместить строку f.setVisible(true); в конец метода на всякий случай. Когда вы делаете фрейм видимым, дерево компонентов настраивается с учетом всех компонентов, добавленных в JFrame. Если после этого вы добавите дополнительные компоненты, вам нужно будет либо выполнить повторную валидацию дерева вручную, либо сделать что-то, что запускает автоматическую c повторную валидацию. Я предполагаю, что вы нигде не проверяете свое дерево, поэтому вам следует переместить f.setVisible(true); в после добавления всех компонентов.

...