2

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

このコードを実行すると、期待するすべてのものが表示されます。これは、プログラムの起動時間を示す数値と、メニューバーを除く画面上部のメニューバーです。ペイント方法をコメントアウトしてみましたが、コメントするとうまくいきます。私がしていることを行うためのより良い方法や、私の問題に対する別の解決策はありますか?また、ウィンドウに何かを印刷するためのより良い方法があれば、そこにペイントメソッドを用意する必要はありません。

4

1 に答える 1

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に追加します。

于 2011-06-16T11:20:49.223 に答える