无法获取要显示的 JFrame 内容

问题描述 投票:0回答:1

首先,是的,我已经查看了许多有关此问题的其他帖子,并且我已经正确实现了所有这些帖子,但仍然无法使其发挥作用。

这是我的代码:

由于单击菜单项而正在初始化,如下所示:

JMenuItem menuItem = new JMenuItem("Open My Panel");
menuItem.addActionListener(new OpenMyPanel());
menu.add(menuItem);


private class OpenMyPanel implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent evt) {
        MyPanel dialog = new MyPanel();
    }
}

这是课程:

class MyPanel extends JFrame {

    public MyPanel() {
        JPanel panel = (JPanel)getContentPane();
        panel.setLayout(new BorderLayout());
        panel.setPreferredSize(new Dimension(1000, 1000));
        panel.setBackground(Color.RED);
        panel.add(new JLabel("Hello World"), BorderLayout.NORTH);
        setContentPane(panel); // Don't think I need to do this but tried anyway.
        pack();
        setVisible(true);
    }
}

框架确实显示,但完全是空的,背景是白色的。

这就是我得到的:

我把尺寸改成100x100这样图片就不会那么大了

java swing jframe
1个回答
0
投票

像这样尝试一下。我省略了菜单内容,因为它不完整。

不要扩展

JFrame
,因为很少需要对其进行子类化。 但一定要延长
JPanel
。这也有助于强制面板的尺寸,而无需担心框架的边框宽度。即框架将适应
JPanel
尺寸。

尽管

setPreferredSize
有效,但通常会覆盖
getPreferredSize

public class MyPanel extends JPanel {
    JFrame frame = new JFrame();
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(()->new MyPanel());
    
    }
    public MyPanel() {
       frame.add(this);
       setLayout(new BorderLayout());
      
       setBackground(Color.RED);
       add(new JLabel("Hello World"), BorderLayout.NORTH);
      
       frame.pack();
       frame.setLocationRelativeTo(null); // center on screen
                                          // (optional)
       frame.setVisible(true);
    }
    
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(1000,1000);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.