我仍然需要学习很多关于编程(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。
感谢您的时间。