📄 drawpanel.java
字号:
package graph;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class DrawPanel extends ShowPanel{
boolean drawModel=true;
boolean conceret=true;
int x1,y1;
int x2,y2;
int p1=0,p2=1;
Vector Points= new Vector();
Vector Liners=new Vector();
Controls con=new Controls();
MouseAdapter adapter;
GraWriter writer=new GraWriter("Graph");
public DrawPanel(Graph g){
super(g);
this.add(con);
initAdapter();
addMouseListener(adapter);
}
public void initAdapter(){
adapter=new MouseAdapter(){
public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
if(drawModel){
Point v=new Point(x1,y1);
Points.addElement(v);
conceret=(con.starts.getText()=="1")?false:true;
if(conceret){
p2=Points.indexOf(v);
Liners.addElement(new Point(p1,p2));
p1=p2;
}
renew();
if(Points.size()>30)
removeMouseListener(adapter);
}else{
int len=points.length;
for(int i=0;i<len;i++){
if((Math.abs(points[i].x-x1)<66)&&(Math.abs(points[i].y-y1)<=6)){
SelectPoint(points[i]);
p1=i;
break;
}
}
}
}
public void mouseReleased(MouseEvent e){
x2=e.getX();
y2=e.getY();
if(drawModel){
}else{
int len=points.length;
for(int i=0;i<len;i++){
if((Math.abs(points[i].x-x2)<66)&&(Math.abs(points[i].y-y2)<=6)){
SelectPoint(points[i]);
p2=i;
draw(p1,p2);
links[p1][p2]=true;
break;
}
}
}
}
};
}
public void paint(Graphics g){
if(!drawModel)
super.paint(g);
else{
int len=Points.size();
Point v,v1,v2;
for(int i=0;i<len;i++){
v=(Point)Points.elementAt(i);
g.drawOval(v.x-6,v.y-6,12,12);
}
len=Liners.size();
for(int i=0;i<len;i++){
v=(Point)Liners.elementAt(i);
v1=(Point)Points.elementAt(v.x);
v2=(Point)Points.elementAt(v.y);
g.drawLine(v1.x,v1.y,v2.x,v2.y);
}
}
}
public void savegraph(){
int len=Points.size();
graph=new Graph(len);
points=new Point[len];
links=new boolean[len][len];
for(int i=0;i<len;i++){
points[i]=(Point)Points.elementAt(i);
}
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
links[i][j]=false;
}
}
len=Liners.size();
Point v;
for(int i=0;i<len;i++){
v=(Point)Liners.elementAt(i);
links[v.x][v.y]=true;
}
graph.setLabels(points);
graph.setEdges(links);
save();
drawModel=true;
renew();
}
public void renew(){
repaint();
}
public void save(){
writer.save(this);
}
public class Controls extends Panel {
Button go=new Button("运行");
Button a=new Button("刷新");
Button draw=new Button("画图");
Label sta=new Label("开始点");
Button grink=new Button("保存");
Button link=new Button("连接");
TextField starts=new TextField("0",4);
TextField first=new TextField("0",4);
TextField second=new TextField("0",4);
public Controls(){
add(sta);
add(starts);
add(go);
add(a);
add(draw);
add(grink);
add(link);
add(first);
add(second);
go.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//renew();
int start=Integer.parseInt(starts.getText());
Algo.dfPrint(graph,start);
}
});
a.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(drawModel){
a.setLabel("删除");
Points.removeAllElements();
Liners.removeAllElements();
} renew();
}
});
draw.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(drawModel){
draw.setLabel("画图");
a.setLabel("刷新");
sta.setText("开始点");
go.setEnabled(true);
renew();
drawModel=false;
}else{
draw.setLabel("搜索");
a.setLabel("删除");
sta.setText("连续?1/0");
go.setEnabled(false);
renew();
drawModel=true;
}
}});
grink.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
savegraph();
}});
link.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int p1=Integer.parseInt(first.getText());
int p2=Integer.parseInt(second.getText());
if(!drawModel){
if(p1<0){
links[Math.abs(p1)][Math.abs(p2)]=false;
graph.delEdge(Math.abs(p1),Math.abs(p2));
}
else{
links[Math.abs(p1)][Math.abs(p2)]=true;
graph.addEdge(Math.abs(p1),Math.abs(p2));
}
}else{
if(p1<0){
Points.remove(Math.abs(p1));
}else
Points.addElement(new Point(Math.abs(p1),Math.abs(p2)));
}
renew();
}});
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -