import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /* * 程序的功能是显示一个窗口,窗口上有一个按钮,当单击这个按钮的时候屏幕上出现一个圆 * */ public class Fire extends JPanel { public final static int CIRCLE=1,SQUARE=2;//定义两个常量,这个地方要知道的是对于用final关键字定义 //我们应该用类名直接对其进行引用 private int shape;//定义一个整型的变量,这个变量和利用final关键字声明的常量是可以相互赋值的 @Override public void paintComponent(Graphics g)//对JPanel中的paintComponent这个关键字进行重写 { super.paintComponent(g);//重写的时候要用super对父类传递画笔 g.setColor(new Color(0,255,255)); if(shape==CIRCLE) g.fillOval(50,10,60,60);//画一个圆前两个是坐标,后两个是长和宽 else if(shape==SQUARE) g.fillRect(50,10,60,60);//画一个矩形,并且这样的矩形是填充好的,填充的颜色是画笔的颜色 } public static void main(String args[]) { CustomPanelTest application=new CustomPanelTest(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //set shape value repaint Custom Panel public void draw(int shapeToDraw)//定义方法draw,这个里面有一个函数 { shape=shapeToDraw; repaint(); } } class CustomPanelTest extends JFrame{//定义一个类,这个类是继承了JFrame这个类 private JPanel buttonPanel;//定义一个面板 private Fire myPanel;//定义一个上面的类的对象 private JButton circleButton,squareButton;//定义一个JButton按钮 public CustomPanelTest() {//构造函数 super("Custom Test");//给基类传递参数,其实也是设置对框的名称 myPanel = new Fire();//给myPanel进行复制 myPanel.setBackground(Color.green); squareButton = new JButton("Squre");//给创建按钮,并且在上面添加文字 squareButton.addActionListener(//添加事件消息 new ActionListener() { public void actionPerformed(ActionEvent event) { myPanel.draw(Fire.CIRCLE);//当事件发生的时候 } } ); buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(1, 2)); buttonPanel.add(squareButton); Container container = getContentPane(); container.add(myPanel, BorderLayout.CENTER); container.add(buttonPanel, BorderLayout.SOUTH); setSize(300, 150); setVisible(true); } }//这个程序初学者来说感觉有很大的帮助,在第二个类中有很多的内容,也让我们
接触到一些类的用法,现在来分析分析一下第二个类:
第二个类继承了JFrame这个类,显示是对窗口的操作,其实在这个然后在这个类中我们创建JPanel面板的对象,和我们自定义的Fire这个类的对象,还有JButton的对象,然后这个程序的主体部分,也可以说是这个类的主体部分是构造函数,在这个构造函数中我们首先是调用super这个函数对父类进行了赋值,其实也是设置窗口的标题,除了这些构造函数也没有忘记自己的本分工作,对上面我们定义的属性都进行了赋值,最精彩的部分也是对初学者来说最为可以学到东西的还是对按钮添加事件,和鼠标不同之处这个地方是用到的函数addActionListener(),这个函数的参数是new ActionListener()然后是一个“{”接着函数actionPerformed进行重写,这个函数的参数是一个事件(ActionEvent event),然后添加我们要执行的步骤,其实我一直不清楚这个地方的添加按钮消息或者是添加监听作为一个函数来对待,其实可以作为一种动作来对待然后我们将这个按钮添加到面板上,积累了两个面板之后我们在重建一个Container面板,然后将我们创建的面板都添加到这个面板上去,最后再将这个面板添加到窗口上,这个就是该程序第二个类的主要的思想和步骤!