Java:双缓冲图形和菜单栏不能一起工作

时间:2012-09-11 17:02:37

标签: java swing graphics jmenubar double-buffering

我仍然需要学习很多关于编程(java)的知识,到目前为止我大多使用了Graphics。我尝试制作菜单栏,它有效。但我在使用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。

感谢您的时间。

0 个答案:

没有答案