2

我仍然需要学习很多关于编程(java)的知识,到目前为止我主要使用图形。我尝试制作一个菜单栏,它奏效了。但是我在同时使用 Graphics 和 JMenubar 时遇到了问题。首先我可以绘制图形,但是在查看了一些网站(包括这个)之后,我设法让图形工作。不幸的是,不是双缓冲。

这就是我一直双缓冲的方式,我不知道这是否是双缓冲的坏方法:

import java.awt.*;
import javax.swing.*;


public class DoubleBuffering extends JFrame
{
private Image dbImage;
private Graphics dbg;
int i = 1;

public DoubleBuffering()
{
    setTitle("Double Buffering");
    setVisible(true);
    setResizable(false);
    setSize(400, 300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void paint(Graphics g)
{
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, 0, 0, this);
}

public void paintComponent(Graphics g)
{
    g.setColor(Color.black);
    g.drawString("Text", 75, 71);

    i++;
    g.drawRect(50 + i, 100, 50, 50);

    repaint();
}

public static void main(String[] args)
{
    DoubleBuffering DB = new DoubleBuffering();
}

}

这是我的代码,只有菜单栏和图形。主类:

import javax.swing.*;


public class MenubarTest extends JFrame
{
JMenuBar menubar = new JMenuBar();
private drawing drawing;


public MenubarTest()
{
    setTitle("JTextField test");
    setVisible(true);
    setSize(400, 300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.drawing = new drawing();
    this.add(drawing);

    setJMenuBar(menubar);
    menubar.setSize(getWidth(), 10);

    JMenu menuA = new JMenu("Menu A");
    menubar.add(menuA);
    JMenuItem ItemA1 = new JMenuItem("Item A1");
    menuA.add(ItemA1);


    JMenu menuB = new JMenu("Menu B");
    menubar.add(menuB);
    JMenuItem itemB1 = new JMenuItem("Item B1");
    menuB.add(itemB1);
}

public static void main(String[] args)
{
    MenubarTest mt = new MenubarTest();
}
}

绘画类:

import java.awt.*;
import javax.swing.*;


public class drawing extends JPanel
{
int i;

public void paintComponent(Graphics g)
{
    g.setColor(Color.black);
    g.drawString("Text", 75, 71);

    i++;
    g.drawRect(50 + i, 100, 50, 50);
}
}

我希望你能帮助我,我一直在寻找一段时间,我找到了一些双缓冲的方法,但它们没有奏效。其中一些是 BufferedImage 和 BufferStrategy。

感谢您的时间。

4

0 回答 0