Добавление JApplet в JFrame - PullRequest
5 голосов
/ 15 мая 2011

Я пытаюсь просмотреть JApplet в JFrame.

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);
}

Апплет отображается в окне, но фон отсутствует (он прозрачный), и когда я нажимаю на Меню,список покрыт.Как сделать так, чтобы список меню не покрывался, и был фон?

Редактировать: когда я рисую белый прямоугольник, это устраняет проблему с фоном, но список меню все еще покрыт.

1 Ответ

6 голосов
/ 15 мая 2011

Я бы направил свое создание GUI к созданию JPanel, а затем использовал бы JPanel по своему желанию, либо в JApplet, либо в JFrame.Например,

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();
         }
      });
   }
}
...