java - 如何在图形顶部绘制 JMenuBar

标签 java swing timer 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);
}

当我运行这段代码时,我得到了我所期望的一切,其中一些数字显示了程序已经运行了多长时间,以及屏幕顶部的菜单栏(菜单栏除外)。我尝试过注释掉绘制方法,当我这样做时它就起作用了。有没有更好的方法来完成我正在做的事情,或者有不同的解决方案来解决我的问题?另外,如果有更好的方法在窗口上打印内容,我不需要在那里使用 Paint 方法。

最佳答案

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

关于java - 如何在图形顶部绘制 JMenuBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370858/

相关文章:

java - 如何在java中使用正则表达式分割一个大数?

java - 如何使 JButton 将用户输入添加到 ArrayList 并将其显示在 JList 中

c++ - 保留计时器集合的最佳方法(对象与指针)

java - 具有列表值的 Guice MapBinder

java - "void is an invalid type for the variable buttonOK"- 单击按钮后尝试关闭对话框

java - 如何测试来自 JPanel 的用户输入?

java - 添加框架内容时出现空指针异常

java - 定时任务不运行

android - Timer 是否在后台线程上运行?与 timer.schedule() 的执行不一致

java - Apache Camel - 使用 jdbcMessageIdRepository 实现的幂等消费者模式是线程安全的吗?