2011-06-16 106 views
2

我正在用Java編寫一個基本的定時器程序,在程序中,我想在頂部有一個菜單欄。我以現在的代碼是:如何在圖形上繪製JMenuBar

public Main() { 
    JMenuBar menubar = new JMenuBar(); 

    setJMenuBar(menubar); 

    JMenu menu = new JMenu("Test"); 
    menubar.add(menu); 

    JMenuItem menuitem = new JMenuItem("Item"); 
    menu.add(menuitem); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(500, 500); 
    setTitle(Namer.name); 
    new Timer(delay, timer).start(); 
    new Timer(1, new Refresher()).start(); 
    setResizable(false); 
    setVisible(true); 
} 

public void paint(Graphics g) { 
    Graphics buffer = unscreen.getGraphics(); 
    buffer.setColor(Color.white); 
    buffer.fillRect(0, 0, 500, 500); 
    buffer.setColor(Color.black); 
    buffer.setFont(new Font("Times New Roman", Font.PLAIN, 25)); 
    // buffer.drawString("hours:minutes:seconds: ", 25, 100); 
    buffer.drawString(hourss + numhours + ":" + minutess + numminutes + ":" 
      + secondss + numseconds, 100, 100); 
    g.drawImage(unscreen, 0, 0, null); 
} 

當我運行這段代碼,我得到的一切我所期望的,該圖是多久程序已經啓動的一些數字和的頂部的菜單欄屏幕,除了菜單欄。我已經嘗試過註釋掉paint方法,並且當我這樣做時它可以工作。有沒有更好的方式來做我正在做的事情或對我的問題採取不同的解決方案?另外,如果有更好的方法在窗口上打印東西,我不需要那裏的繪畫方法。

+0

你有沒有試過在你的paint方法中調用'super.paint(g)'? – Kyle 2011-06-16 11:17:43

+0

謝謝,但它沒有奏效。 – user600842 2011-06-16 11:20:48

回答

7

直接繪製JFrame不是一個好主意。擴展一個JComponent,重寫它的paintComponent()來完成你的自定義繪畫,並將其添加到JFrame中可能會更麻煩。這種方式JMenuBar在JFrame上,一切正常。

public class DrawingSurface extends JComponent{ 

      public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics buffer = unscreen.getGraphics(); 
      buffer.setColor(Color.white); 
      buffer.fillRect(0, 0, 500, 500); 
      buffer.setColor(Color.black); 
      buffer.setFont(new Font("Times New Roman", Font.PLAIN, 25)); 
      // buffer.drawString("hours:minutes:seconds: ", 25, 100); 
      buffer.drawString(hourss + numhours + ":" + minutess + numminutes + ":" 
      + secondss + numseconds, 100, 100); 
      g.drawImage(unscreen, 0, 0, null); 
     } 
    } 

現在將一個DrawingSurface的實例添加到JFrame中。

+0

+1:這是正確的答案。 – 2011-06-16 11:29:21

+0

另外,在JFrame上繪圖會導致第一個,比方說20個垂直像素位於窗口的標題欄下方。 – 2011-06-16 11:30:11