【问题标题】:OK button and String not showing up on JPanel确定按钮和字符串未显示在 JPanel 上
【发布时间】:2020-10-30 17:31:13
【问题描述】:

我正在尝试制作一个显示打印语句“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);
            }
        }
    }

【问题讨论】:

  • 如果 one of the answers 解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。

标签: java swing user-interface jpanel jbutton


【解决方案1】:

您忘记将 JPanel 添加到 JFrame。只需在 createAndShowGUI() 方法的底部添加以下行:

f.add(content);

为了安全起见,我还建议您将 f.setVisible(true); 行移到方法的底部。当您使框架可见时,将设置组件树以考虑添加到 JFrame 的所有组件。如果之后添加更多组件,您将需要手动重新验证树或执行触发自动重新验证的操作。我假设您没有在任何地方重新验证您的树,因此您应该在添加所有组件后将 f.setVisible(true); 移动到。

【讨论】:

  • 为了安全起见。“内容”面板需要在框架可见之前添加到框架中,否则面板的大小将为 (0, 0 ) 因为不会调用布局管理器。 .
  • 谢谢,我自己也意识到了。进行了编辑。不过,他们也有可能在某处重新验证。我将在另一次编辑中进一步解释。
猜你喜欢
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 2015-05-09
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多