图形中的按钮

Button in Graphic

我的最后一个问题可能太长了所以我决定改一下 我正在寻找制作按钮或侦听器的方法,以便在按下后显示此图形我刚刚开始编程,所以我不知道该怎么做。 任何帮助将不胜感激:)

 import java.applet.Applet; 
import java.awt.*; 

 //The applet code
 public class Main extends Applet {

     /**
     * 
     */
    private static final long serialVersionUID = 1L;

    /**
     * 
     */


    public void init() {  
            setSize(2000,500);  
        }  

     public void paint(Graphics g) {    
    int A = 0;





//Hat
             g.setColor(Color.blue);
             int m[] = {A+170,A+120,A+220};
             int hat[] = {0,35,35};
             int pts = 3;
             g.fillPolygon(m, hat, pts);       
//head
             g.setColor(Color.gray); 
             g.fillRoundRect(123,35,95,95,20,20);   
//Eye one
             g.setColor(Color.blue); 
             g.fillOval(130,50,25,25);
//Eye (inside) one
             g.setColor(Color.black); 
             g.fillOval(137,57,10,10);
//Eyelid right
             g.setColor(Color.cyan); 
             g.fillArc(130,50,26,15,-15,220);   
//Eye two 
             g.setColor(Color.blue); 
             g.fillOval(185,50,25,25);
//Eye (inside)two 
             g.setColor(Color.black); 
             g.fillOval(192,57,10,10);  
//Eyelid left
             g.setColor(Color.cyan); 
             g.fillArc(184,50,26,15,-15,220);   
//Nose
             g.setColor(Color.green); 
             g.fillRoundRect(165,70,10,25,20,20);
//Mouth
             g.setColor(Color.red); 
             g.fillArc(140,90,60,40,20,-220);
//Mouth (inside fill out)
             g.setColor(Color.white); 
             g.fillArc(142,99,55,26,20,-220);   
//Mouth (inside2 middle1)
             g.setColor(Color.red); 
             g.drawArc(142,97,55,20,20,-220); 
//Mouth (inside3 middle2)
             g.setColor(Color.red); 
             g.drawArc(142,98,55,20,20,-220); 
//Neck
             g.setColor(Color.gray); 
             g.fillRect(155,130,30,20);
//Body 
             g.setColor(Color.gray); 
             g.fillRoundRect(100,151,145,70,20,20);
//Body 2 
             g.setColor(Color.gray); 
             g.fillRoundRect(120,185,100,100,20,20);
//Chest 1 (left)
             g.setColor(Color.black); 
             g.fillRoundRect(107,157,60,50,20,20);  
//Chest 2 (right)
             g.setColor(Color.black); 
             g.fillRoundRect(178,157,60,50,20,20);  
//Abs 1 (left)
             g.setColor(Color.black); 
             g.fillRoundRect(140,209,30,22,20,20);  
//Abs 2 (left)
             g.setColor(Color.black); 
             g.fillRoundRect(140,233,30,22,20,20);  
//Abs 3 (left)
             g.setColor(Color.black); 
             g.fillRoundRect(140,257,30,22,20,20);
//Abs 1 (right)
             g.setColor(Color.black); 
             g.fillRoundRect(174,209,30,22,20,20);  
//Abs 2 (right)
             g.setColor(Color.black); 
             g.fillRoundRect(174,233,30,22,20,20);  
//Abs 3 (right)
             g.setColor(Color.black); 
             g.fillRoundRect(174,257,30,22,20,20);
//Arm 1 
             g.setColor(Color.gray); 
             g.fillRoundRect(45,151,50,130,20,20);  
//Hand 1 
             g.setColor(Color.black); 
             g.fillRoundRect(45,250,50,30,20,20);
//Gun top hole
             g.setColor(Color.red); 
             g.fillOval(55,260,30,30);        
//Gun 1 
             g.setColor(Color.blue); 
             g.fillRoundRect(60,270,20,60,20,20);        
//Gun end 
             g.setColor(Color.black); 
             g.fillRect(60,320,20,10);
//Fire 
             g.setColor(Color.red); 
             g.fillOval(63,330,14,40);
//Arm 2
             g.setColor(Color.gray); 
             g.fillRoundRect(250,151,50,130,20,20);
//Hand 2 
             g.setColor(Color.black); 
             g.fillRoundRect(250,250,50,30,20,20);       
//Saw top hole
             g.setColor(Color.red); 
             g.fillOval(260,260,30,30);
//Saw stick
             g.setColor(Color.black); 
             g.fillRoundRect(270,270,10,60,20,20);
//Saw teeth 1
             g.setColor(Color.gray);
             g.fillRect(256,311,38,38);
//Saw teeth 2
             g.setColor(Color.red);
             int a[] = {A+250,A+275,A+300,A+275};
             int saw[] = {330,305,330,355};
             int fourPoints = 4;
             g.fillPolygon(a, saw, fourPoints);    
//Saw middle wheel 
             g.setColor(Color.black);
             g.fillOval(257,312,37,37);
//Saw middle wheel end
             g.setColor(Color.gray);
             g.fillOval(267,322,16,16);
//Pants 
             g.setColor(Color.black); 
             g.fillRect(120,284,101,50);
//Leg 1
             g.setColor(Color.gray); 
             g.fillRoundRect(115,335,50,150,20,20);
//Leg 2 
             g.setColor(Color.gray); 
             g.fillRoundRect(181,335,50,150,20,20);
//feet1
             g.setColor(Color.black); 
             g.fillRoundRect(115,460,50,30,20,20);
//feet2 
             g.setColor(Color.black); 
             g.fillRoundRect(181,460,50,30,20,20);
     }
 }

使用内置的 jframe class。 您可以 set.contentpane(visible, false) 将图形放入内容窗格。 然后使用 jbutton 将内容窗格设置为在单击时可见

至少从使用 Swing 开始 API。我还质疑使用小程序的必要性,并建议使用基于 window 的 类,它们更容易处理。

首先创建一个从类似 JPanel 扩展的自定义组件,重写它的 paintComponent 方法并在其中放置自定义绘画。

创建另一个 JPanel 并为其分配一个 BorderLayout 并将其添加到您的主容器中,这将充当 "robot pane"

的占位符

创建一个 JButton,使用 BorderLayout,将 "content pane" 和按钮都放在顶层容器中(在您的例子中是小程序)

ActionListener 附加到按钮,当它被触发时,创建 "robot pane" 的新实例并将其放置在 "content pane"

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;

public class Main extends JApplet {

    private JPanel content;

    public void init() {
        setLayout(new BorderLayout());

        content = new JPanel(new BorderLayout()) {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(500, 2000);
            }
        };
        add(content);

        JButton btn = new JButton("Show me the robot");
        add(btn, BorderLayout.SOUTH);
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                btn.setEnabled(false);
                RobotPane botPane = new RobotPane();
                content.add(botPane);
                revalidate();
                repaint();
            }
        });
    }

    public class RobotPane extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500, 2000);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            int A = 0;

//Hat
            g.setColor(Color.blue);
            int m[] = {A + 170, A + 120, A + 220};
            int hat[] = {0, 35, 35};
            int pts = 3;
            g.fillPolygon(m, hat, pts);
//head
            g.setColor(Color.gray);
            g.fillRoundRect(123, 35, 95, 95, 20, 20);
//Eye one
            g.setColor(Color.blue);
            g.fillOval(130, 50, 25, 25);
//Eye (inside) one
            g.setColor(Color.black);
            g.fillOval(137, 57, 10, 10);
//Eyelid right
            g.setColor(Color.cyan);
            g.fillArc(130, 50, 26, 15, -15, 220);
//Eye two 
            g.setColor(Color.blue);
            g.fillOval(185, 50, 25, 25);
//Eye (inside)two 
            g.setColor(Color.black);
            g.fillOval(192, 57, 10, 10);
//Eyelid left
            g.setColor(Color.cyan);
            g.fillArc(184, 50, 26, 15, -15, 220);
//Nose
            g.setColor(Color.green);
            g.fillRoundRect(165, 70, 10, 25, 20, 20);
//Mouth
            g.setColor(Color.red);
            g.fillArc(140, 90, 60, 40, 20, -220);
//Mouth (inside fill out)
            g.setColor(Color.white);
            g.fillArc(142, 99, 55, 26, 20, -220);
//Mouth (inside2 middle1)
            g.setColor(Color.red);
            g.drawArc(142, 97, 55, 20, 20, -220);
//Mouth (inside3 middle2)
            g.setColor(Color.red);
            g.drawArc(142, 98, 55, 20, 20, -220);
//Neck
            g.setColor(Color.gray);
            g.fillRect(155, 130, 30, 20);
//Body 
            g.setColor(Color.gray);
            g.fillRoundRect(100, 151, 145, 70, 20, 20);
//Body 2 
            g.setColor(Color.gray);
            g.fillRoundRect(120, 185, 100, 100, 20, 20);
//Chest 1 (left)
            g.setColor(Color.black);
            g.fillRoundRect(107, 157, 60, 50, 20, 20);
//Chest 2 (right)
            g.setColor(Color.black);
            g.fillRoundRect(178, 157, 60, 50, 20, 20);
//Abs 1 (left)
            g.setColor(Color.black);
            g.fillRoundRect(140, 209, 30, 22, 20, 20);
//Abs 2 (left)
            g.setColor(Color.black);
            g.fillRoundRect(140, 233, 30, 22, 20, 20);
//Abs 3 (left)
            g.setColor(Color.black);
            g.fillRoundRect(140, 257, 30, 22, 20, 20);
//Abs 1 (right)
            g.setColor(Color.black);
            g.fillRoundRect(174, 209, 30, 22, 20, 20);
//Abs 2 (right)
            g.setColor(Color.black);
            g.fillRoundRect(174, 233, 30, 22, 20, 20);
//Abs 3 (right)
            g.setColor(Color.black);
            g.fillRoundRect(174, 257, 30, 22, 20, 20);
//Arm 1 
            g.setColor(Color.gray);
            g.fillRoundRect(45, 151, 50, 130, 20, 20);
//Hand 1 
            g.setColor(Color.black);
            g.fillRoundRect(45, 250, 50, 30, 20, 20);
//Gun top hole
            g.setColor(Color.red);
            g.fillOval(55, 260, 30, 30);
//Gun 1 
            g.setColor(Color.blue);
            g.fillRoundRect(60, 270, 20, 60, 20, 20);
//Gun end 
            g.setColor(Color.black);
            g.fillRect(60, 320, 20, 10);
//Fire 
            g.setColor(Color.red);
            g.fillOval(63, 330, 14, 40);
//Arm 2
            g.setColor(Color.gray);
            g.fillRoundRect(250, 151, 50, 130, 20, 20);
//Hand 2 
            g.setColor(Color.black);
            g.fillRoundRect(250, 250, 50, 30, 20, 20);
//Saw top hole
            g.setColor(Color.red);
            g.fillOval(260, 260, 30, 30);
//Saw stick
            g.setColor(Color.black);
            g.fillRoundRect(270, 270, 10, 60, 20, 20);
//Saw teeth 1
            g.setColor(Color.gray);
            g.fillRect(256, 311, 38, 38);
//Saw teeth 2
            g.setColor(Color.red);
            int a[] = {A + 250, A + 275, A + 300, A + 275};
            int saw[] = {330, 305, 330, 355};
            int fourPoints = 4;
            g.fillPolygon(a, saw, fourPoints);
//Saw middle wheel 
            g.setColor(Color.black);
            g.fillOval(257, 312, 37, 37);
//Saw middle wheel end
            g.setColor(Color.gray);
            g.fillOval(267, 322, 16, 16);
//Pants 
            g.setColor(Color.black);
            g.fillRect(120, 284, 101, 50);
//Leg 1
            g.setColor(Color.gray);
            g.fillRoundRect(115, 335, 50, 150, 20, 20);
//Leg 2 
            g.setColor(Color.gray);
            g.fillRoundRect(181, 335, 50, 150, 20, 20);
//feet1
            g.setColor(Color.black);
            g.fillRoundRect(115, 460, 50, 30, 20, 20);
//feet2 
            g.setColor(Color.black);
            g.fillRoundRect(181, 460, 50, 30, 20, 20);
        }

    }
}

了解更多详情

为了得到你想要的东西,你需要一个按钮和一个监听器。您将需要一个 JButton 和一个 ActionListener。下面您将看到我编写的一些代码来创建使用 JButtonsActionListeners 的二十一点游戏。 ActionListeners 将链接到您的 JButtons,以便在单击按钮时,ActionListener 执行您想要完成的任何操作。

  JButton Quit = new JButton("Quit");
  Quit.addActionListener(new QuitListener());
  CenterSub.add(Quit, BorderLayout.SOUTH);

让我们从代码段的第一行开始。我在等号的右侧声明了一个名为 QuitJButton。在左侧,我完成了初始化,并给出了要在实际按钮上显示的 JButton 文本。在这种情况下,一旦程序为 运行,按钮将显示为 "Quit"。第二行将 ActionListener 添加到 JButton 以便单击按钮后,将执行 ActionListener 中的代码。在第二行的括号中,我将新的 ActionListener 称为 QuitListener。当我编写 Listener 代码时,这将是它的名称。最后一行显示了我在 JPanel 上添加按钮的位置。我调用了 JPanel 名称 (CenterSub),然后传入按钮的名称以及我希望它位于的位置作为参数。

private class QuitListener implements ActionListener
   {
      public  void actionPerformed(ActionEvent e)
      {
         System.exit(0);
      }
   }

此代码段是我在第一个代码段中添加到 JButtonQuitListener 的定义。 QuitListener 实现了接口 ActionListener ,它允许我定义 actionPerformed(ActionEvent e) 方法来做我想做的事。 ActionEvent 是玩家点击 "Quit" 按钮。单击按钮时,方法 actionPerformed 将执行并调用 System.exit(0) 终止程序,从而允许玩家退出游戏。

因此,总结一下,实现您想要的效果,创建一个 JButton、一个 ActionListener 并在 ActionListener 定义中为 actionEvent 方法, 调用你定义的 paint 方法。如需进一步帮助,我强烈建议您查看 Jbutton API 以及您可能需要的任何其他 API。

这个JButton API.

这是我第一次回答问题,所以我希望这能帮助您了解您的需求。