如何在图形顶部绘制JMenuBar



我正在用Java编写一个基本的计时器程序,我希望在程序的顶部有一个菜单栏。到目前为止,我的代码是:

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

当我运行这段代码时,我会得到我想要的一切,即一些显示程序运行时间的数字,以及屏幕顶部的菜单栏,菜单栏除外。我试过对绘画方法进行评论,当我这样做的时候,它就起作用了。有没有更好的方法来做我正在做的事情,或者用不同的方法来解决我的问题?此外,如果有更好的方法在窗户上打印东西,我不需要有油漆方法。

直接绘制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中。

相关内容

  • 没有找到相关文章