2011-03-16 62 views
0

我正在写一个程序,它只是一个简单的形状制造者,我应该是我的主面板,ShapeMakerPanel,以及那个面板上的2个面板,controlPanel(它包含用于选择形状的按钮和清理它等)和drawingArea(实际绘制形状的地方),但无论我做什么,我都无法将绘图显示在drawingArea上。如果我只是使用paintComponent并注释掉添加(drawingArea),那么绘图的东西就起作用了,但是在最底层,我该如何绘制drawingArea Jpanel。此外,当我画的形状,我只能有一次一个,因为我每次开始一个新的,面板擦拭clean`在JPanels上绘画

super.paintComponent(g); 
    g.setColor(penColor); 
    if (p1 != null && p2 != null) 
    { 
     if (shapeChoice.getSelectedItem().equals("Line")) 
     { 
      Line line = new Line(p1.x, p1.y, p2.x, p2.y); 
      line.draw(g); 
     } 
    } 

我知道它的super.paintComponent方法(G)搞砸了我,但没有,因为我拖动鼠标,它会绘制数百行。

如果您想知道Line类,我们必须为每个绘制的形状创建一个类,draw()方法只是使用线的坐标并将其放入drawLine()中。

回答

1

请勿在ShapeMakerPanel中重写paintComponent();在drawingArea的类中覆盖它(如果drawingArea是普通的JPanel,则创建JPanel的新子类)。一般来说,您需要对要绘制的组件进行子类化。

+0

备注:在大多数情况下,JPanel不会为JComponent未提供的自定义绘画带来任何影响。 – 2011-03-16 04:05:47

0

此外,当我做画的形状,我只能有一次一个,因为我每次开始一个新的,面板擦拭clean`

Custom Painting Approaches的一对夫妇如何解决这个问题。