我正在用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方法,当我这样做时它有效。有没有更好的方法来做我正在做的事情或我的问题的不同解决方案?此外,如果有更好的方法在窗口上打印东西,我不需要在那里使用paint方法。
答案 0 :(得分: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。