将小程序添加到 JFrame
Posted
技术标签:
【中文标题】将小程序添加到 JFrame【英文标题】:Adding JApplet into JFrame 【发布时间】:2011-08-25 17:57:39 【问题描述】:我正在尝试在 JFrame 中查看 JApplet。
Class: Paint
public void paint(Graphics g)
g.drawString("hi", 50, 50);
public static void main(String args[])
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setJMenuBar(methodThatReturnsJMenuBar());
JPanel panel = new JPanel(new BorderLayout());
frame.add(panel);
JApplet applet = new Paint();
panel.add(applet, BorderLayout.CENTER);
applet.init();
frame.pack();
frame.setVisible(true);
小程序出现在窗口中,但没有背景(它是透明的),当我单击菜单时,列表被覆盖。如何使菜单列表不被覆盖,并且有背景?
编辑:当我绘制一个白色矩形时,它修复了背景问题,但菜单列表仍然被覆盖。
【问题讨论】:
你为什么要这样做?你想解决什么问题? 只是为了方便(我不想从 appletviewer 或网络浏览器启动)。 我不知道您的确切要求,但对我来说听起来不太方便。我认为小程序通常不是今天要走的路。您可以查看 JavaFX 或 JNLP 以获取替代方案。 javafx.comen.wikipedia.org/wiki/Java_Web_Start 这里发生了许多错误。 JApplet 是一个根容器,因此我相信它是一个重量级容器,不会与您的轻量级容器(例如包含 JPanel)搭配得很好。为什么不装备你的 GUI 来创建 JPanel,然后如果你想将它们作为一个小程序在 JApplet 中使用它们,或者如果你希望它们在一个独立的情况下在 JFrame 中使用它们? 如faq 中所述,请接受和/或投票给您认为有用的答案。 【参考方案1】:我会将我的 GUI 创建用于制作 JPanel,然后在 JApplet 或 JFrame 中根据需要使用 JPanel。例如,
import java.awt.*;
import javax.swing.*;
public class MyPanel extends JPanel
private static final Dimension PREF_SIZE = new Dimension(400, 300);
@Override
protected void paintComponent(Graphics g)
super.paintComponent(g);
g.drawString("hi", 50, 50);
@Override
public Dimension getPreferredSize()
return PREF_SIZE;
public JMenuBar methodThatReturnsJMenuBar()
JMenu menu = new JMenu("Menu");
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);
return menuBar;
然后在小程序中使用:
import javax.swing.JApplet;
public class MyApplet extends JApplet
public void init()
try
javax.swing.SwingUtilities.invokeAndWait(new Runnable()
public void run()
createGUI();
);
catch (Exception e)
System.err.println("createGUI didn't successfully complete");
private void createGUI()
getContentPane().add(new MyPanel());
或者在 JFrame 中:
import javax.swing.JFrame;
public class MyStandAlone
private static void createAndShowUI()
MyPanel myPanel = new MyPanel();
JFrame frame = new JFrame("MyPanel");
frame.getContentPane().add(myPanel);
frame.setJMenuBar(myPanel.methodThatReturnsJMenuBar());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
public static void main(String[] args)
java.awt.EventQueue.invokeLater(new Runnable()
public void run()
createAndShowUI();
);
【讨论】:
+1,让面板创建菜单栏的有趣方法。不要忘记在小程序上设置菜单栏。 @camickr,谢谢。如果我没有重写 JPanel 方法,有时我会以相同的方式获取 JPanel,并且让主类不扩展任何内容——所有这些都是以组合优于继承的名义。但在实际方面,它在我的 IDE 中编码时会有所帮助,因为它只会显示我为类创建的方法,而不是 JPanel 的所有方法。以上是关于将小程序添加到 JFrame的主要内容,如果未能解决你的问题,请参考以下文章