java - 在 Click 基础上绘制 2D 图形对象

标签 java netbeans graphics awt

下面是我的代码。它在执行时绘制三角形。我想对此做一点改变。 变化是

执行时会有 1 个三角形。但如果我在三角形 1 内部单击,则会绘制另一个三角形。不然就不画了。

我尝试处理g2d.draw(triangle2);

中的更改

但是有问题。它只是不显示三角形,而是将其绘制为隐藏。

public class Triangle_shape extends JFrame implements ActionListener {
    public static int x=0;
    public static  JButton btnSubmit = new JButton("Submit");
    public static  JButton change = new JButton("Change");
    public Triangle_shape(){
    }
  public static void main(String[] args) {

    TrianglePanel t= new TrianglePanel();
    ClickListener cl= new ClickListener();
    JFrame frame = new JFrame ();  
    final int FRAME_WIDTH = 500;  
    final int FRAME_HEIGHT = 500;
    btnSubmit.addActionListener(cl);
    frame.setSize (FRAME_WIDTH, FRAME_HEIGHT);           
    frame.setLayout(new BorderLayout());
    frame.add(new TrianglePanel(), BorderLayout.CENTER);
    frame.add(btnSubmit, BorderLayout.PAGE_END);
    frame.add(change, BorderLayout.LINE_END);
    frame.pack();
    frame.repaint();
    frame.setTitle("A Test Frame");               
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    frame.setVisible(true);  
    }

   public static class TrianglePanel extends JPanel implements MouseListener{
        private Polygon triangle,triangle2;

        public TrianglePanel(){
            //Create triangle
            System.out.println("From Draw "+x);
            triangle = new Polygon();
            triangle.addPoint(150, 200);
            triangle.addPoint(100, 100);
            triangle.addPoint(200, 100);
            triangle2 = new Polygon();
            triangle2.addPoint(200, 300);
            triangle2.addPoint(200, 200);
            triangle2.addPoint(300, 200);
            //Add mouse Listener
            addMouseListener(this);
            //Set size to make sure that the whole triangle is shown
            setPreferredSize(new Dimension(300, 300));
        }

        /** Draws the triangle as this frame's painting */

        public void paintComponent(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            System.out.println("From Graphics "+x);
            g2d.draw(triangle);
            g2d.draw(triangle2);
        }

        //Required methods for MouseListener, though the only one you care about is click
        public void mousePressed(MouseEvent e) {}
        public void mouseReleased(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}

        /** Called whenever the mouse clicks. */
        public void mouseClicked(MouseEvent e) {
            x++;
            Point p = e.getPoint();
            if(triangle.contains(p)  ) 
                 System.out.println("1");
            else if  (triangle2.contains(p))
            {       System.out.println("2");
             }
            else
            {
                System.out.println("Trianglhhhhhhhhhhhhhhhhhhpoint");
            x--;}
        }          
   }
    private static class ClickListener implements ActionListener {
    private int clickCount = 0;
    @Override
    public void actionPerformed(ActionEvent e) {
      if (e.getSource() == btnSubmit) {
        clickCount++;
        if (clickCount == 1)
          btnSubmit.setText("clicked!");
        else
        btnSubmit.setText("Inside Triangle " + x + " times!");
      } 
        else {
          //JOptionPane.showMessageDialog(MainClass.this, "You must click at least once!",
           btnSubmit.setText("Error " + clickCount + " times!");          
        }

        }
    }
}

enter image description here

最佳答案

尝试下面的代码,它是根据您自己的代码创建的示例。

   import javax.swing.*;
   import java.awt.*;
   import java.awt.event.MouseEvent;
   import java.awt.event.MouseListener;
   public class MyTriangle{
   static  JFrame frame = new JFrame();
   public static void main(String[] args)
    {
    frame.setSize(1000, 1500);
    frame.setTitle("Triangle Draw");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //add panel to frame and make it visible
    Polygon triangle1 = new Polygon();
    triangle1.addPoint(100, 500); // first
    triangle1.addPoint(600, 500);//last
    triangle1.addPoint(350, 300);//middel
    addTriangle(new Triangle(triangle1));
    frame.setVisible(true);
}

public static void addTriangle(Triangle triangle1)
{
    frame.add(triangle1);
}
static class Triangle extends JPanel implements MouseListener{
    private Polygon triangle;

    public Triangle(Polygon triangle)
    {
        this.triangle = triangle;

        addMouseListener(this);
    }

    public void paintComponent(Graphics g){
        Graphics2D g2d = (Graphics2D)g;
        g2d.draw(triangle);

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        Point p = e.getPoint();
        if(triangle.contains(p))
        {
            Polygon triangle2 = new Polygon();
            triangle2.addPoint(200, 300);
            triangle2.addPoint(200, 200);
            triangle2.addPoint(300, 200);
            MyTriangle.addTriangle(new Triangle(triangle2));
            Graphics2D g2d = (Graphics2D)this.getGraphics();
            g2d.draw(triangle2);
        }
    }


}

}

关于java - 在 Click 基础上绘制 2D 图形对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701816/

相关文章:

c - Vulkan:无效的着色器模块对象

java - 如何将 JLabel 的文本放在其图标下

java - 在日历提供程序中创建新事件

java - 使用 CMIS 创建两个文件 (Alfresco CE 4.2.c) 之间的关系

git - 无论如何,NetBeans 都会看到未推送到远程 git 存储库的提交

java - 按下 javafx 按钮时不执行

java - 如何使用阶乘编写方程

java - HQL添加OR语句时抛出异常

java - Netbeans 6.x 中的 2D 绘图

python - 有关于在 python 中创建自定义绘图对象-类的好教程吗?