📄 drawpanel.java
字号:
package graphics0;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.image.*;
/**
* <p>Title: computer graphics </p>
* <p>Description: homeworks</p>
* <p>Copyright: Copyright (c) 2004 </p>
* <p>Company: shu</p>
* @author dxf
* @version 1.0
*/
public class DrawPanel
extends JPanel {
BufferedImage bi;
Graphics2D big;
Vector v2D,vp;
int clickCount, lWidth, lStyle;
Color FrColor, BkColor;
Point spoint, epoint,p0;
int iObject, iLine, iSelect;
int iFillMethod, iClipMethod;
Frame frame;
public DrawPanel(Frame f) {
v2D = new Vector();
frame = f;
spoint = new Point(0, 0);
epoint = new Point(0, 0);
FrColor = Color.BLACK;
BkColor = Color.WHITE;
bi = new BufferedImage(Object2D.cWidth, Object2D.cHeight, BufferedImage.TYPE_INT_RGB);
big = bi.createGraphics();
big.setBackground(BkColor);
big.clearRect(0, 0, Object2D.cWidth, Object2D.cHeight);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
panel_mousePressed(e);
panel_mouseClicked(e);
}
});
}
////////////////////////////////////////////////////////////////////
public void Clear() {
v2D.clear();
clickCount = 0;
big.clearRect(0, 0, Object2D.cWidth, Object2D.cHeight);
if (frame.jCheckBoxMenuItemDemo.isSelected()) {
DrawGrid();
}
repaint();
}
///////////////////////////////////////////////////////////////////////
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2D = (Graphics2D) g;
g2D.drawImage(bi, 0, 0, this);
}
/////////////////////////////////////////////////////////////////////
public void panel_mouseClicked(MouseEvent e) {
if (2==e.getClickCount()) {
v2D.addElement(new PolygonDx(vp));
vp.add(new Point(e.getPoint()));
DrawPloygon((Point)(vp.lastElement()),(Point)(vp.firstElement()));
vp.clear();
clickCount = 0;
}
if (frame.jTBtnCentre.isSelected()) {
frame.jTFCX.setText(Integer.toString(e.getPoint().x));
frame.jTFCY.setText(Integer.toString(e.getPoint().y));
}
}
//////////////////////////////////////////////////////////////////////
public void panel_mousePressed(MouseEvent e) {
Graphics g = this.getGraphics();
clickCount++;
g.drawString(e.getX() + "," + e.getY(), e.getX(), e.getY());
//////////////////////////////////////////////////////////
//Line,circle,ellipse
if (0 == iSelect) {
if (clickCount == 1) {
spoint = e.getPoint();
}
if (clickCount == 2) {
epoint = e.getPoint();
Draw2D();
}
}
///////////////////////////////////////////////////////////
//Fill
if (1 == iSelect) {
// if (clickCount == 1) {
spoint = e.getPoint();
Fill();
// }
}
///////////////////////////////////////////////////////////////
//plygon
if (2 == iSelect) {
if (vp.size()>0) {
p0 = (Point) (vp.lastElement());
}
else {
p0 = e.getPoint();
lWidth = Integer.parseInt(frame.jTextFieldLWidth.getText());
lStyle = frame.jComboBoxL.getSelectedIndex();
}
DrawPloygon(e.getPoint(), p0);
vp.add(new Point(e.getPoint()));
}
/////////////////////////////////////////////////////////////////////////
if (3 == iSelect) {
if (clickCount == 1) {
spoint = e.getPoint();
}
if (clickCount == 2) {
epoint = e.getPoint();
LineWidowClip(spoint,epoint) ;
}
}
/////////////////////////////////////////////////////////////////////////
if (4 == iSelect) {
if (clickCount == 1) {
spoint = e.getPoint();
}
if (clickCount == 2) {
epoint = e.getPoint();
PolygonWidowClip(spoint,epoint) ;
}
}
}
////////////////////////////////////////////////////////////////////////////////
void LineWidowClip(Point sp,Point ep) {
LineDx l0 = (LineDx)(v2D.lastElement());
big.drawRect(spoint.x,spoint.y,Math.abs(epoint.x -spoint.x),
Math.abs(epoint.y-spoint.y));
//repaint();
if (0==iClipMethod){
Object2D.CS_LineClip(l0.spoint, l0.epoint, sp, ep, BkColor, big);
}
if (1==iClipMethod){
Object2D.Mid_LineClip(l0.spoint, l0.epoint, sp, ep,BkColor, big);
}
repaint();
}
///////////////////////////////////////////////////////////////////////////////
void PolygonWidowClip(Point sp,Point ep) {
PolygonDx tmp = (PolygonDx)(v2D.lastElement());
big.clearRect(0, 0, Object2D.cWidth, Object2D.cHeight);
tmp.draw(big);
tmp.ForeColor = FrColor;
big.setColor(Color.RED);
big.drawRect(spoint.x,spoint.y,Math.abs(epoint.x -spoint.x),
Math.abs(epoint.y-spoint.y));
tmp.SHClip(iClipMethod,spoint,epoint,this);
repaint();
}
////////////////////////////////////////////////////////////////////////////////
void DrawPloygon(Point sp,Point ep) {
//0=虚 1=实 2=点
//Line
LineDx l= new LineDx(sp, ep, 1, FrColor, lWidth,lStyle);
l.draw(big);
repaint();
}
///////////////////////////////////////////////////////////////////////////////
void Fill() {
switch (iFillMethod) {
case 0: {
try {
Object2D.FloodFill4(spoint.x, spoint.y, FrColor, BkColor, bi, big);
}
finally {
clickCount = 0;
}
break;
}
case 1: {
try {
Object2D.FloodFill8(spoint.x, spoint.y, FrColor, BkColor, bi, big);
}
finally {
clickCount = 0;
}
break;
}
case 2: {
try {
int ic;
ic = bi.getRGB(spoint.x,spoint.y);
Object2D.ScanLineFill4(spoint.x, spoint.y, ic, BkColor, bi, big);
}
finally {
clickCount = 0;
}
break;
}
case 3: {
try {
((PolygonDx)v2D.lastElement()).polyfill(BkColor, big);
}
finally {
clickCount = 0;
}
break;
}
}
repaint();
}
/////////////////////////////////////////////////////////////////////////////
void DrawGrid() {
big.setColor(Color.black);
int j = Object2D.DemoWidth * 2;
for (int i = 0; i < Object2D.cWidth; i = i + j) {
big.drawLine(i, 0, i, Object2D.cHeight);
}
for (int i = 0; i < Object2D.cHeight; i = i + j) {
big.drawLine(0, i, Object2D.cWidth, i);
}
repaint();
}
/////////////////////////////////////////////////////////////////////////////
void Draw2D() {
lWidth = Integer.parseInt(frame.jTextFieldLWidth.getText());
lStyle = frame.jComboBoxL.getSelectedIndex();
//0=虚 1=实 2=点
switch (iObject) {
case 0: {
//Line
v2D.addElement(new LineDx(spoint, epoint, iLine, FrColor, lWidth,
lStyle));
break;
}
case 1: {
//Circle
double tmp = (epoint.x - spoint.x) * (epoint.x - spoint.x) +
(epoint.y - spoint.y) * (epoint.y - spoint.y);
tmp = Math.sqrt(tmp);
v2D.addElement(new CircleDx(spoint, 0, (int) tmp, (int) tmp, FrColor,
BkColor,
lWidth, lStyle, frame.jRBtnFill.isSelected()));
break;
}
case 2: {
//Ellipse
v2D.addElement(new CircleDx(spoint, 1, Math.abs(epoint.x - spoint.x),
Math.abs(epoint.y - spoint.y), FrColor,
BkColor,
lWidth, lStyle, frame.jRBtnFill.isSelected()));
break;
}
}
clickCount = 0;
( (Object2D) v2D.lastElement()).draw(big);
if (frame.jCheckBoxMenuItemDemo.isSelected()) {
( (Object2D) v2D.lastElement()).drawDemo(big);
}
repaint();
}
///////////////////////////////////////////////////////////////////////////////
void Translate(int x, int y) {
( (Object2D) v2D.lastElement()).translate(x,y);
( (Object2D) v2D.lastElement()).draw(big);
repaint();
}
///////////////////////////////////////////////////////////////////////////////
void Scale(double sx, double sy) {
( (Object2D) v2D.lastElement()).scale(sx,sy);
( (Object2D) v2D.lastElement()).draw(big);
repaint();
}
////////////////////////////////////////////////////////////////////////////////
void Rotate(double theta, int x, int y){
((Object2D) v2D.lastElement()).rotate(theta,x,y);
((Object2D) v2D.lastElement()).draw(big);
repaint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -