📄 drawview.java
字号:
package boya;
import java.awt.*;
import java.util.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class DrawView extends JComponent implements Observer,ID{
private Draw theApp;
public DrawView(Draw theApp){
this.theApp=theApp;
MouseHandler handler=new MouseHandler();
addMouseListener(handler);
addMouseMotionListener(handler);
}
class MouseHandler extends MouseInputAdapter{
private Point start,end;
private Elements temp;
private Graphics2D g2D;
private Elements createElement(Point start,Point end){
switch(theApp.getWindow().getElementType()){
case LINE:
return new Elements.Line(start,end,theApp.getWindow().getElementColor());
case RECTANGLE:
return new Elements.Rectangle(start,end,theApp.getWindow().getElementColor());
case CIRCLE:
return new Elements.Circle(start,end,theApp.getWindow().getElementColor());
case CURVE:
return new Elements.Curve(start,end,theApp.getWindow().getElementColor());
}
return null;
}
public void mousePressed(MouseEvent e){
start=e.getPoint();
int modifier=e.getModifiers();
if((modifier&e.BUTTON1_MASK)!=0){
g2D=(Graphics2D)getGraphics();
g2D.setXORMode(getBackground());
g2D.setPaint(theApp.getWindow().getElementColor());
}
}
public void mouseDragged(MouseEvent e){
end=e.getPoint();
int modifier=e.getModifiers();
if((modifier&e.BUTTON1_MASK)!=0&&(theApp.getWindow()
.getElementType()!=TEXT)){
if(temp==null)
temp=createElement(start,end);
else{
temp.draw(g2D);
temp.moving(start,end);
}
temp.draw(g2D);
}
}
public void mouseReleased(MouseEvent e){
int modifier=e.getModifiers();
if(e.isPopupTrigger()){
start=e.getPoint();
theApp.getWindow().getPopup().show((Component)e.getSource(),
start.x,start.y);
start=null;
}
else if((modifier&e.BUTTON1_DOWN_MASK)==0&&(theApp.getWindow()
.getElementType()!=TEXT)){
if(temp!=null){
theApp.getModel().add(temp);
temp=null;
}
if(g2D!=null){
g2D.dispose();
g2D=null;
}
start=end=null;
}
}
public void mouseClicked(MouseEvent e){
int modifier=e.getModifiers();
if((modifier&e.BUTTON1_MASK)!=0&&(theApp.getWindow()
.getElementType()==TEXT)){
start=e.getPoint();
String text=JOptionPane.showInputDialog(
(Component)e.getSource(),"输入文字"
,"文字",JOptionPane.PLAIN_MESSAGE);
if(text!=null){
g2D=(Graphics2D)getGraphics();
Font font=theApp.getWindow().getFont();
temp=new Elements.Text(font,text,start,
theApp.getWindow().getElementColor(),
font.getStringBounds(text,g2D.getFontRenderContext()).getBounds());
temp.draw(g2D);
if(temp!=null)
theApp.getModel().add(temp);
temp=null;
g2D.dispose();
g2D=null;
start=null;
}
}
}
}
public void update(Observable o,Object rectangle){
if(rectangle==null)
repaint();
else repaint((Rectangle)rectangle);
}
public void paint(Graphics g){
Graphics2D g2D=(Graphics2D)g;
Iterator elements=theApp.getModel().getIterator();
Elements element;
while(elements.hasNext()){
element=(Elements)elements.next();
element.draw(g2D);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -