首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成将绘图添加到JFrame的按钮

生成将绘图添加到JFrame的按钮
EN

Stack Overflow用户
提问于 2014-11-18 06:01:58
回答 1查看 57关注 0票数 0

因此,我的代码链接到其他一些类,称为SkeletonHandCrossHeadstone。基本上,这部分代码作为所有类的管理器,调用我提到的三个类中的每个类中的绘图方法,然后在JFrame (代表墓地)上绘制骨架手、十字或墓碑的图片。在底部是两个按钮,我也设置了改变背景色。

我的问题,也就是我现在要做的,是如何在最后一个按钮创建(HandClicker)中创建和事件,以便每当按下按钮时都会创建一个新的骨架手?

所以,我想要创建一个名为“举起死亡”的按钮,每当按下这个按钮就会在页面上创建一个新的骨架手。这只手将处于随机的X点位置。但我知道怎么做。首先,我需要知道如何创建事件。有什么有用的见解吗?我会张贴其他的类,以便显示整体情况。

代码语言:javascript
复制
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;

public class ManagerPanel extends JPanel
{
   private JButton clicker;
   private JButton redClicker;
   private JButton greenClicker;
   private JButton blueClicker;
   private JButton handClicker;
   private int red, green, blue;
   private SkeletonHand skeletonHand1, skeletonHand2;
   private Cross cross1, cross2;
   private HeadStone headStone1, headStone2;


   //-----------------------------------------------------------------
   //  Constructor: Creates objects.
   //-----------------------------------------------------------------
   public ManagerPanel()
   { 
      skeletonHand1 = new SkeletonHand (340);
      skeletonHand2 = new SkeletonHand (540);
      cross1 = new Cross (150, "Andrew");
      cross2 = new Cross (530, "Alexis");
      headStone1 = new HeadStone (250, "Jose");
      headStone2 = new HeadStone (431, "Alex");


      clicker = new JButton("Click here");
      clicker.addActionListener (new ClickerListener());

      redClicker = new JButton("More red!");
      redClicker.addActionListener (new RedListener());

      greenClicker = new JButton("More green!");
      greenClicker.addActionListener (new GreenListener());

      blueClicker = new JButton("More blue!");
      blueClicker.addActionListener (new BlueListener());

      handClicker = new JButton("Raise the dead");
      handClicker.addActionListener (new HandListener());

      setBackground (Color.blue);
      setPreferredSize (new Dimension(1000, 700));
      setFont (new Font("Arial", Font.BOLD, 16));

      add (clicker);
      add (redClicker);
      add (greenClicker);
      add (blueClicker);
   }

   //-----------------------------------------------------------------
   //  Draws this panel by requesting that each graphic draw itself.
   //-----------------------------------------------------------------
   public void paintComponent (Graphics page)
   {
      super.paintComponent(page);

      Color brown = new Color(160, 82, 45);
      page.setColor (brown);
      page.fillRect (0, 630, 1000, 70);

      skeletonHand1.draw(page);
      skeletonHand2.draw(page);
      cross1.draw(page);
      cross2.draw(page);
      headStone1.draw(page);
      headStone2.draw(page);

   }


   private class ClickerListener implements ActionListener
   {

      public void actionPerformed (ActionEvent event)
      {
         red = 0; green = 0; blue = 0;
         setBackground (new Color(red, green, blue));
      }
   }


   private class RedListener implements ActionListener
   {

      public void actionPerformed (ActionEvent event)
      {
         red += 20;
         setBackground (new Color(red, green, blue));

      }
   }


   private class GreenListener implements ActionListener
   {

      public void actionPerformed (ActionEvent event)
      {
         green += 20;
         setBackground (new Color(red, green, blue));

      }
   }


   private class BlueListener implements ActionListener
   {

      public void actionPerformed (ActionEvent event)
      {
         blue += 20;
         setBackground (new Color(red, green, blue));

      }
   }


   private class HandListener implements ActionListener
   {

      public void actionPerformed (ActionEvent event)
      {         
         skeletonHand1 = new SkeletonHand (340);
      }
   }
}

代码语言:javascript
复制
import java.awt.*;

public class SkeletonHand
{
   private final int BASEY = 630;
   private int BASEX;



   //-----------------------------------------------------------------
   //  Constructor: Sets up the Skeleton Hand with the specified values.
   //-----------------------------------------------------------------
   public SkeletonHand (int x)
   {
      BASEX = x;
   }

   //-----------------------------------------------------------------
   //  Draws the Skeleton Hands in the specified graphics context.
   //-----------------------------------------------------------------
   public void draw (Graphics page)
   {

      page.setColor (Color.white);
      page.drawLine (BASEX, BASEY-1, BASEX, BASEY-20);   // arm
      page.drawLine (BASEX, BASEY-20, BASEX-5, BASEY-20);  // thumb finger
      page.drawLine (BASEX, BASEY-20, BASEX-5, BASEY-27);  // index finger
      page.drawLine (BASEX, BASEY-20, BASEX-2, BASEY-29);  // middle finger
      page.drawLine (BASEX, BASEY-20, BASEX+1, BASEY-29);  // ring finger
      page.drawLine (BASEX, BASEY-20, BASEX+4, BASEY-27);  // pinky finger
   }
}

代码语言:javascript
复制
import java.awt.*;

public class Cross
{
   private final int BASEY = 630;
   private int BASEX;
   private String name;



   //-----------------------------------------------------------------
   //  Constructor: Sets up the Crosses with the specified values.
   //-----------------------------------------------------------------
   public Cross (int x, String n)
   {
      BASEX = x;
      name = n;
   }

   //-----------------------------------------------------------------
   //  Draws the Cross' in the specified graphics context.
   //-----------------------------------------------------------------
   public void draw (Graphics page)
   {
      page.setColor (Color.darkGray);
      page.fillRect (BASEX, BASEY-120, 30, 120);
      page.fillRect (BASEX-30, BASEY-90, 90, 30); 

      page.setColor (Color.black);
      page.drawString (String.valueOf(name), BASEX-10, BASEY-70);
   }
}

代码语言:javascript
复制
import java.awt.*;

public class HeadStone
{
   private final int BASEY = 630;
   private int BASEX;
   private String name;



   //-----------------------------------------------------------------
   //  Constructor: Sets up the HeadStones with the specified values.
   //-----------------------------------------------------------------
   public HeadStone (int x, String n)
   {
      BASEX = x;
      name = n;
   }

   //-----------------------------------------------------------------
   //  Draws the HeadStones in the specified graphics context.
   //-----------------------------------------------------------------
   public void draw (Graphics page)
   {
      page.setColor (Color.darkGray);
      page.fillRect (BASEX, BASEY-80, 60, 80);
      page.fillOval (BASEX, BASEY-110, 60, 60);

      page.setColor (Color.black);
      page.drawString (String.valueOf(name), BASEX+10, BASEY-75);
   }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-18 06:10:19

如何在最后一个创建按钮(HandClicker)中创建一个事件,以便在按下按钮时创建一个新的骨架手?所以,我想要创建一个名为“举起死亡”的按钮,每当按下这个按钮就会在页面上创建一个新的骨架手。这只手将处于随机的X点位置。但我知道怎么做。首先,我需要知道如何创建事件。有什么有用的见解吗?我会张贴其他的类,以便显示整体情况。

创建一个List作为实例字段..。

代码语言:javascript
复制
private java.util.List<SkeletonHand> hands = new java.util.ArrayList<>(25);

当调用ActionListener for HandClicker时,将SkeletonHand的一个新实例添加到List.

代码语言:javascript
复制
public void actionPerformed (ActionEvent event)
{         
    hands.add(new SkeletonHand (340));
    repaint();
}

作为你油漆过程的一部分,循环浏览这个列表然后画出手.

代码语言:javascript
复制
public void paintComponent (Graphics page)
{
    super.paintComponent(page);

    Color brown = new Color(160, 82, 45);
    page.setColor (brown);
    page.fillRect (0, 630, 1000, 70);

    for (SkeletonHand hand : hands) {
        hand.draw(page)l
    }

    cross1.draw(page);
    cross2.draw(page);
    headStone1.draw(page);
    headStone2.draw(page);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26987669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档