📄 twopanel.java.bak
字号:
package FireFlower;
//设置第二个面板,返回一个JPanel,减少依赖性
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class TwoPanel extends JPanel implements ActionListener{
final private FireFlower ff;
private JButton[] jb=new JButton[4];
final private DotFactory df=new DotFactory();
final AutoThread at=new AutoThread();
private boolean judge1=true;
private boolean judge2=false;
final private Font font=new Font("",Font.BOLD,14);
//TPThread tpTH=new TPThread();
// Object obj=new Object();
public TwoPanel(FireFlower ff){
this.ff=ff;
JLabel jl=new JLabel("自动演示:",JLabel.CENTER);
jl.setFont(font);
String[] name={"开始","暂停","停止","退出"};
setLayout(new GridLayout(1,5));
add(jl);
for(int i=0;i<jb.length;i++){
jb[i]=new JButton(name[i]);
jb[i].setActionCommand(name[i]);
add(jb[i]);
jb[i].addActionListener(this);
jb[i].setFont(font);
}
jb[1].setEnabled(false);
jb[2].setEnabled(false);
setBorder(new LineBorder(Color.pink,3));
}
/*
* 本来是打算新建一个线程来处理按钮被点击得,这样
* 就按钮就不用等待它响应源得事件执行完才释放资源
* 可以提高响应性,但是按钮本身得事件占用时间不长,
* 所以没用这个线程,把代码留下注释,方便以后启用
*
class TPThread extends Thread{
AWTEvent e=null;
public TPThread(){}
public TPThread(AWTEvent e){
this.e=e;
}
public void setEvent(AWTEvent e){
this.e=e;
}
public void run(){
reaction();
}
public void reaction(){
ActionEvent e=(ActionEvent)this.e;
if(e.getActionCommand().equals("退出")){
try{
ff.mt.myJudge=false;
ff.mt.join();
}catch(Exception ee){}
System.exit(0);
}
else if(e.getActionCommand().equals("开始")){
jb[0].setEnabled(false);
jb[1].setEnabled(true);
jb[2].setEnabled(true);
if(!judge2){
// if(!at.isAlive()){at.start();}
judge1=true;
judge2=true;
ff.mt.judge=true;
}
}
else if(e.getActionCommand().equals("暂停")){
judge2=false;
jb[0].setEnabled(true);
jb[1].setEnabled(false);
ff.mt.judge=false;
autoPaint();
}
else if(e.getActionCommand().equals("停止")){
judge1=false;
judge2=false;
ff.mt.judge=true;
jb[0].setEnabled(true);
jb[1].setEnabled(false);
jb[2].setEnabled(false);
}
}
}
*/
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("退出")){
try{
ff.mt.myJudge=false;
ff.mt.join();
}catch(Exception ee){}
System.exit(0);
}
else if(e.getActionCommand().equals("开始")){
jb[0].setEnabled(false);
jb[1].setEnabled(true);
jb[2].setEnabled(true);
if(!judge2){
// if(!at.isAlive()){at.start();}
judge1=true;
judge2=true;
ff.mt.judge=true;
}
}
else if(e.getActionCommand().equals("暂停")){
judge2=false;
jb[0].setEnabled(true);
jb[1].setEnabled(false);
ff.mt.judge=false;
autoPaint();
}
else if(e.getActionCommand().equals("停止")){
judge1=false;
judge2=false;
ff.mt.judge=true;
jb[0].setEnabled(true);
jb[1].setEnabled(false);
jb[2].setEnabled(false);
}
}
public void autoPaint(){
ff.repaint();
}
class AutoThread extends Thread{
public void run(){
int x=ff.getWidth();
int y=ff.getHeight();
Dot dot=null;
while(true){
while(judge1){//控制停止
if(judge2){//控制暂停
int rand=(int)(Math.random()*99);
int x1=0;
int y1=0;
x1=(int)(Math.random()*x);
y1=(int)(Math.random()*y);
if(x1==0&&y1==0){
x1=(int)(Math.random()*400);
y1=(int)(Math.random()*400);
}
dot=df.makeDot(rand,x1,y1);
synchronized(ff.mm.lList){
ff.mm.lList.add(dot);
ff.mc.beginDraw(ff.mm.lList);
}
try{
Thread.sleep((int)(Math.random()*15+1)*100);
}catch(Exception e){}
}//if
}//外层while
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -