首先,是的,我已经查看了许多有关此问题的其他帖子,并且我已经正确实现了所有这些帖子,但仍然无法使其发挥作用。
这是我的代码:
由于单击菜单项而正在初始化,如下所示:
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这样图片就不会那么大了
像这样尝试一下。我省略了菜单内容,因为它不完整。
不要扩展
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);
}
}