Java GUI - 从抽象类调用draw方法

时间:2017-10-11 21:36:36

标签: java swing draw paintcomponent

我编译的程序运行时没有错误,但是当我在画布内单击时,没有生成/绘制形状。 compiled program PaintComponent类

objectType

指针侦听器类。

private class CanvasPanel extends JPanel {

  //this method draws all shapes 
  public void paintComponent(Graphics page)
   {
        super.paintComponent(page);
        setBackground(Color.WHITE);

        for (int i = 0; i < shapeList.size(); i++) {
            ((Shape) shapeList.get(i)).draw(page);
        }
   }     
} 

抽象形体类

public class PointListener implements MouseListener
    {
     public void mousePressed (MouseEvent event)
      {
         Point pt = event.getPoint();
         //pointList.add(event.getPoint());
         if (currentShape.equals("circle")) {
             nShape = new Circle((int)pt.getX(), (int)pt.getY(), currentSize, currentSize, currentColor);
             shapeList.add(nShape);
         } else {
             nShape = new Square((int)pt.getX(), (int)pt.getY(), currentSize, currentSize, currentColor);
             shapeList.add(nShape);
         }
         repaint(); 
      }

理想情况下,用户使用所选选项单击画布,单击会生成形状对象并存储在列表中。 paint组件遍历整个列表并调用shape类draw方法,该方法从我的Square / Circle子类中提取并绘制其选定的形状。不幸的是什么也没发生。缺少什么? 谢谢!

这是一个包含我所有项目的回购。 https://github.com/Purpleshoes/assignment7

1 个答案:

答案 0 :(得分:0)

我查看了您的myReader = cmdDataBase.ExecuteReader(); while (myReader.Read()) { } 课程并找到了以下问题

  1. 您创建了using(SqlConnection connection = new SqlConnection(_connectionString)) { String query = "INSERT INTO Products (Barcodes, Name, EDate, Quantity, Price) VALUES (@Barcodes, @Name, @EDate, @Quantity,@Price)"; using(SqlCommand command = new SqlCommand(query, connection)) { SqlCommand command = new SqlCommand(query, db.Connection); command.Parameters.AddWithValue("@Barcodes", this.tbxBar.Text ) command.Parameters.AddWithValue("@Name", this.tbxName.Text ) command.Parameters.AddWithValue("@EDate",this.dateDate.Value.Date) command.Parameters.AddWithValue("@Quantity",this.tbxQua.Text) command.Parameters.AddWithValue("@Price",this.tbxPrice.Text) int result = command.ExecuteNonQuery(); // Check Error if(result < 0) // data insert error } } 类并且从未使用过它,它应该像 ip name 0 10.1.1.1 aa 1 10.1.1.2 bb 一样使用
  2. 您创建了ip name 10.1.1.1 aa 10.1.1.2 bb 类并且从未使用过它,它应该像这样使用WholePanel

  3. 您使用了本地ComboListener个实例而不是类级comboShapes.addActionListener(new ComboListener());个实例,因此PointListener类中的canvas.addMouseListener(new PointListener());方法将永远无效

  4. JComboBox类中的
  5. JComboBox方法,没有任何意义,所以你需要重新做逻辑
  6. 因此我对actionPerformed()课程做了一些修改,见下文

    ComboListener