2010-05-18 6 views
1
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 

@SuppressWarnings("serial") 
public class Main extends JFrame { 

    final int FRAME_HEIGHT = 400; 
    final int FRAME_WIDTH = 400; 

    public static void main(String args[]) { 
     new Main(); 
    } 

    public Main() { 
     super("Game"); 

     GameCanvas canvas = new GameCanvas(); 

     JMenuBar menuBar = new JMenuBar(); 
     JMenu fileMenu = new JMenu("File"); 
     JMenuItem startMenuItem = new JMenuItem("Pause"); 
     menuBar.add(fileMenu); 
     fileMenu.add(startMenuItem); 

     getContentPane().add(canvas); 
     super.setVisible(true); 
     super.setSize(FRAME_WIDTH, FRAME_WIDTH); 
     super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     super.setJMenuBar(menuBar); 
    } 
} 


import java.awt.Canvas; 
import java.awt.Graphics; 

import javax.swing.JPanel; 

@SuppressWarnings("serial") 
public class GameCanvas extends JPanel { 

    public void paint(Graphics g) { 
     g.drawString("hI", 0, 0); 
    } 
} 

이 코드는 문자열을 JMenuBar 뒤에 표시합니다. 문자열을 보려면 문자열을 (0,10)에 그려야합니다. 이게 뭔가 간단한 것이 틀림 없어, 너희들은 어떤 생각을 가지고 있니? FontMetrics에 그림에 의해 제안JPanel이 JMenuBar 뒤에 표시됩니다.

+0

getContentPane().add(canvas);를 추가 끝에 당신의 생성자에서

,. 사용자 정의 페인팅은 paint() 메소드가 아닌 paintComponent() 메소드를 대체하여 수행됩니다. super.paintComponent (...)를 호출하여 배경이 다시 그려지는지 확인해야합니다. – camickr

답변

3

FontMetrics fm = g.getFontMetrics(); 
g.drawString("hI", 10, fm.getMaxAscent()); 

을보십시오.

부록 : @RaviG도 적합합니다.

+0

가! 나는베이스 라인의 코도에 대해 생각하지는 않는다. > __> 고마워요! –

+0

이 다이어그램을 자주 참조해야합니다. :-) – trashgod

2

프레임에 캔버스를 추가하지 않았습니다.

는 사용자 정의 그림을 어떻게 아닙니다 그런데

+0

죄송합니다. 게시 한 코드에 작은 문제가있었습니다. 나는 코드를 게시하기 전에 코드를 가지고 놀았습니다. 그리고이 과정에서 특정 부분을 제거했습니다.이 질문을 만들 때 다시 추가하는 것을 잊었습니다. 그래도 trashgod의 해결책은 정확합니다. –

+1

+1'this.add (캔버스)'도 전달을 통해 작동합니다. – trashgod

관련 문제