继承是java的一大特性,主要的实现方式是extends,使用extends时需要注意只能继承一个类,即extends后面只能接一个类名。继承者称为子类,被继承者称为父类,子类含有父类允许的所有属性。另外,若不用extends,想要调用其他类的方法,则需要注意,其他类中方法前有加public的可以继承,但有private的不能继承。
继承相当于是子类对于父类的扩展,是一种详细的描述,如男人属于人,那么人是父类,男人是子类。由此我们可以想到button和panel的扩展。

button是父类,它的作用是模糊的,那么我们可以根据button的作用来扩展,如做一个开关按钮,初始时为关闭状态,我们定义为“0”。按一下button改变一次状态,button的状态在“0”和“1”之间转换。

import java.awt.*;
import java.awt.event.*;

//bool按钮
public class BoolButton extends Button 
{
	public void labelInit()
	{
		setLabel("0");
	}
	public void BoolButton()
	{
		this.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if(getLabel().contains("0"))
					setLabel("1");
				else if(getLabel().contains("1"))
					setLabel("0");
			}
		});
	}
}

以上是创建的BoolButton类,其继承了button类的属性,拥有上述所说的特点。
再来创建另外一个button的子类,根据作用,我们想要按一下按钮退出窗口,那么就做一个Exit按钮,用来退出程序。

import java.awt.*;
import java.awt.event.*;

//exit按钮
public class ExitButton extends Button 
{
	public void labelInit()
	{
		setLabel("Exit");
	}
	public void ExitButton()
	{
		this.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
	}
}

有了这两种例子,其他功能的按钮也能照样做出来。
接下来是panel的继承。
想做一个画板,上面就简单地画一个灯,让它与之前的bool按钮相联系,当按钮状态为“0”时,灯为红色;按钮状态为“1”时,灯为绿色。

import java.awt.*;
import java.awt.event.*;

public class DrawPanel extends Panel
{
	static int feature = 0;
	public void changeFeature()
	{
		if(feature == 1)
		   feature = 0;
		else
		   feature = 1;
	}
	public void paint(Graphics g)
	{
		super.paint(g);
		if(feature == 0)
		{
			g.setColor(Color.red);	

		}		   
		else
		{
		  g.setColor(Color.green);	 
		}
		g.fillRoundRect(50,50,100,100,12,12);	
	}
	public void drawPanel()
	{
		setSize(200,200);	
	}
}

改变状态的关键在于参数feature,我们在别的类中调用changeFeature方法可以改变画板的选用颜色。
最后是将这些按钮和画板整合到一起,我们再创建一个frame的子类,用来放置按钮和画板。

import java.awt.*;
import java.awt.event.*;

public class MyFrame extends Frame implements ActionListener
{
	
	BoolButton boolButton = new BoolButton();
	ExitButton exitButton = new ExitButton();
	DrawPanel drawPanel = new DrawPanel();
	Panel panel = new Panel();
		
	public MyFrame()
	{				
		boolButton.labelInit();	
		exitButton.labelInit();	
		boolButton.BoolButton();
		exitButton.ExitButton();
		
		boolButton.addActionListener(this);
		
		this.setLayout(new GridLayout(2,1));
		panel.setLayout(null);	
		drawPanel.setLayout(null);
		
		boolButton.setBounds(50,50,100,100);
		exitButton.setBounds(300,50,100,100);
		
		panel.add(boolButton);
		panel.add(exitButton);
		
		add(drawPanel);
		add(panel);
	}
	public void actionPerformed(ActionEvent e)
	{
		drawPanel.changeFeature();
		drawPanel.repaint();
	}
	public static void main(String[] args)
	{
		 MyFrame frame = new MyFrame();   	
		 frame.setTitle("颜色转换按钮和退出按钮");
		 frame.setResizable(false);	
		 frame.setSize(500,500);		
		 frame.setVisible(true);	
	}
}

由于paint方法绘制图形不会马上刷新,需要最小化再打开才能生效,那我们需要在按下按钮的瞬间让灯的颜色改变则需要用到repaint方法。在这里repaint方法使用只用于画板,所以加上画板变量名drawPanel,若不加则和原来一样。
java button和panel的继承
java button和panel的继承

相关文章: