【问题标题】:Button in Graphic图形中的按钮
【发布时间】:2015-05-31 05:08:21
【问题描述】:

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

 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);
     }
 }

【问题讨论】:

  • 我建议改变你的逻辑。创建一个扩展自 JPanel 之类的自定义组件,覆盖它的 paintComponent 方法并将自定义图形放入其中。创建一个JButton 并将其与另一个JPanel 一起放在屏幕上。单击按钮时,可以将空白面板替换为您的自定义面板或将其添加到其中。更多详情请见How to Use Buttons, Check Boxes, and Radio Buttons
  • 我刚开始学java,我们的老师向我们展示了简单的图形创作,如矩形、椭圆形等。所以我决定给我们做一些更大的东西,而不是简单的形状,然后制作这个机器人。完整版有超过 1000 行,机器人正在移动。我正在考虑为每个形状创建类以缩短代码。但我没有时间处理所有其他任务,所以我就这样保持下去。
  • 您可能对2D GraphicsShape API 感兴趣
  • 1) 为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets。 2) 为什么使用 AWT?请参阅this answer,了解许多放弃 AWT 使用支持 Swing 的组件的充分理由。
  • @TomaszLesiecki 不要忘记选择正确的答案。祝你编码好运。图形还不是我的强项,但我希望我能帮到你。

标签: java button graphics awt paint


【解决方案1】:

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

首先创建一个从JPanel 之类的扩展而来的自定义组件,覆盖它的paintComponent 方法并将自定义绘画放置在其中。

创建另一个 JPanel 并为其分配一个 BorderLayout 并将其添加到您的主容器中,这将充当“机器人窗格”的占位符

创建一个JButton,使用BorderLayout,将“内容窗格”和按钮都放在顶级容器(在您的情况下是小程序)中

在按钮上附加一个ActionListener,当它被触发时,创建一个“机器人窗格”的新实例并将其放置在“内容窗格”中

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);
        }

    }
}

更多详情

【讨论】:

  • 非常感谢你,帮助很大
  • 很高兴它有帮助,一定要吸收教程,它们会帮助无穷
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

    这是JButton API

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

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多