2011-05-15 5 views
4

JFrame에서 JApplet을 보려고합니다.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); 
} 

애플릿 창에 표시되지만 배경은 (는 투명한)가 없다, 나는 메뉴를 클릭하면 목록이 덮여있다. 메뉴 목록이 덮여 있지 않고 배경이 있도록하려면 어떻게해야합니까?

편집 : 흰색 직사각형을 그릴 때 배경 문제는 해결되지만 메뉴 목록은 계속 덮여 있습니다.

+0

가 왜 이러는 :

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의에서

? 어떤 문제를 해결하려고합니까? –

+0

편의상 (애플릿 뷰어 또는 웹 브라우저에서 실행하고 싶지 않습니다.) – LanguagesNamedAfterCofee

+0

정확한 요구 사항을 모르지만 지나치게 편리하지 않습니다. 나는 애플릿이 대개 오늘가는 길은 아니라고 생각합니다. JavaFX 또는 JNLP에서 대안을 확인하십시오. http://javafx.com/ http://en.wikipedia.org/wiki/Java_Web_Start –

답변

6

JPanel을 만들고 나서 JApplet 또는 JFrame에서 원하는대로 JPanel을 사용하기 위해 GUI 작성을 할 것입니다. 예를 들어,

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.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

+1, 재미있는 접근 방법으로 패널에 메뉴 모음을 만들 수 있습니다. 애플릿에 메뉴 막대를 설정하는 것을 잊지 마십시오. – camickr

+0

@camickr, 감사합니다. JPanel 메서드를 재정의하지 않는 경우 JPanel을 같은 방식으로 가져 와서 주 클래스에 아무 것도 확장하지 말아야합니다.이 모든 것이 상속 이상의 합성이라는 이름으로되어 있습니다. 그러나 실용적인 측면에서, JPanel의 모든 메서드가 아니라 클래스에 대해 만든 메서드 만 제공하므로 내 IDE에서 코딩 할 때 도움이됩니다. –

+1

+1 [both] (https://sites.google.com/site/drjohnbmatthews/subway) 할 수도 있습니다. – trashgod

관련 문제