我正在制作一个简单的绘图应用程序。我有一个扩展JFrame的类和一个扩展JMenuBar的类。我设置了一个扩展JPanel的类,作为JFrame的内容窗格,并绘制了它的paintComponent方法。问题是,当我从Window的redisplay方法调用DrawPane的repaint方法时,我的JMenuBar也被绘制在JPanel内部,如下所示:
它不像原始版本那样具有交互性,我可以在上面画图,这意味着它位于内容窗格中。
据我所读,JMenuBar与JFrame的contentPane不重叠。为什么会这样呢?
这是我的代码:
public class Window extends JFrame {
private DrawPane drawPane;
private EventHandler eventHandler;
private FrameMenu frameMenu;
public Window(String title, int w, int h)
{
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
eventHandler = new EventHandler();
frameMenu = new FrameMenu();
setJMenuBar(frameMenu);
drawPane = new DrawPane();
drawPane.setPreferredSize(new Dimension(w,h));
drawPane.addMouseListener(eventHandler);
addKeyListener(eventHandler);
setContentPane(drawPane);
pack();
setVisible(true);
}
public void redisplay()
{
drawPane.repaint();
}
}
我有一个静态的点ArraList,可以在DrawPane的paintComponent方法中进行绘制。
public class DrawPane extends JPanel {
@Override
public void paintComponent(Graphics g)
{
g.setColor(Color.red);
int c=0;
Point prev = new Point(0,0);
for(Point p:Source.vertices)
{
g.fillRect(p.x-2, p.y-2, 4, 4);
if(c++ > 0)
{
g.drawLine(p.x, p.y, prev.x, prev.y);
}
prev = p;
}
}
}
和JMenuBar:
public class FrameMenu extends JMenuBar implements ActionListener {
JMenuItem newItem = new JMenuItem("New Line Connection");
JMenuItem newBezItem = new JMenuItem("New Bezier Curve");
JMenu fileMenu = new JMenu("File");
JMenuItem sizeItem = new JMenuItem("Canvas Size");
JMenu windowMenu = new JMenu("File");
public FrameMenu()
{
//setting up hierarchy and action listeners..
}
public void actionPerformed(ActionEvent event) {
//menu interactions...
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。