📄 painter.java
字号:
else{
gImage.draw(rectangle);
}
if(transparent){
gImage.setComposite(composite);
}
}
if(rounded && width != 0 && height != 0){
RoundRectangle2D.Double round =
new RoundRectangle2D.Double(tempStart.x,
tempStart.y, width, height, 10, 10);
if(shadow){
paint = gImage.getPaint();
composite = gImage.getComposite();
gImage.setPaint(Color.black);
gImage.setComposite(AlphaComposite.getInstance
(AlphaComposite.SRC_OVER, 0.3f));
RoundRectangle2D.Double round2 =
new RoundRectangle2D.Double(tempStart.x + 9,
tempStart.y + 9, width, height, 10, 10);
if(solid || shade || transparent || texture){
gImage.fill(round2);
}
else{
gImage.draw(round2);
}
gImage.setPaint(paint);
gImage.setComposite(composite);
}
if(solid){
gImage.setPaint(color);
}
if(shade){
gImage.setPaint(
new GradientPaint(
tempStart.x, tempStart.y, color,
tempEnd.x, tempEnd.y, Color.black));
}
if(transparent){
gImage.setComposite(AlphaComposite.getInstance
(AlphaComposite.SRC_OVER,0.3f));
}
if(texture){
Rectangle2D.Double anchor =
new Rectangle2D.Double(0,0,
tileImage.getWidth(), tileImage.getHeight());
TexturePaint texturePaint =
new TexturePaint(tileImage,anchor);
gImage.setPaint(texturePaint);
}
if(solid || shade || texture || transparent){
gImage.fill(round);
}
else{
gImage.draw(round);
}
if(transparent){
gImage.setComposite(composite);
}
}
if(draw){
Line2D.Double drawLine;
if(shadow){
paint = gImage.getPaint();
composite = gImage.getComposite();
gImage.setPaint(Color.black);
gImage.setComposite(AlphaComposite.getInstance
(AlphaComposite.SRC_OVER, 0.3f));
for(int loop_index = 0; loop_index < dots - 1;
loop_index++){
if(dragging){
drawLine = new Line2D.Double(
dot[loop_index].x + 9,
dot[loop_index].y + 9,
dot[loop_index + 1].x + 9,
dot[loop_index + 1].y + 9);
}else{
drawLine = new Line2D.Double(
dot[loop_index].x - offsetX + 9,
dot[loop_index].y - offsetY + 9,
dot[loop_index + 1].x - offsetX + 9,
dot[loop_index + 1].y - offsetY + 9);
}
gImage.draw(drawLine);
}
gImage.setPaint(paint);
gImage.setComposite(composite);
}
for(int loop_index = 0; loop_index < dots - 1;
loop_index++){
if(dragging){
drawLine = new Line2D.Double(dot[loop_index].x,
dot[loop_index].y, dot[loop_index + 1].x,
dot[loop_index + 1].y);
}else{
drawLine = new Line2D.Double(dot[loop_index].x
- offsetX, dot[loop_index].y - offsetY,
dot[loop_index + 1].x - offsetX,
dot[loop_index + 1].y - offsetY);
}
gImage.draw(drawLine);
}
if(!dragging){
dots = 0;
}
}
}
if(text){
if(drawText != null && end != null && end.x !=0 &&
end.y !=0){
if(shadow){
paint = gImage.getPaint();
composite = gImage.getComposite();
gImage.setPaint(Color.black);
gImage.setComposite(AlphaComposite.getInstance
(AlphaComposite.SRC_OVER, 0.3f));
gImage.drawString(drawText, end.x + 9, end.y + 9);
gImage.setPaint(paint);
gImage.setComposite(composite);
}
gImage.drawString(drawText, end.x, end.y);
}
}
if(!dragging){
g.drawImage(image, offsetX, offsetY, this);
}
g.setColor(Color.black);
gImage.setStroke(new BasicStroke(1));
g.drawRect(offsetX, offsetY, imageWidth, imageHeight);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == openMenuItem){
try{
dialog.setMode(FileDialog.LOAD);
dialog.setVisible(true);
if(dialog.getFile() != ""){
File inputFile = new File(dialog.getDirectory() +
dialog.getFile());
bufferedImage = ImageIO.read(inputFile);
if(bufferedImage != null){
image = createImage(bufferedImage.getWidth(),
bufferedImage.getHeight());
Graphics2D g2d = (Graphics2D)
image.getGraphics();
g2d.drawImage(bufferedImage, null, 0, 0);
imageWidth = bufferedImage.getWidth();
imageHeight = bufferedImage.getHeight();
setSize(imageWidth + 100, imageHeight + 90);
repaint();
}
}
}catch(Exception exp){
System.out.println(exp.getMessage());
}
}
if(e.getSource() == saveMenuItem){
dialog.setMode(FileDialog.SAVE);
dialog.setVisible(true);
try{
if(dialog.getFile() != ""){
String outfile = dialog.getFile();
File outputFile = new File(dialog.getDirectory() +
outfile);
bufferedImage.createGraphics().drawImage(image,
0, 0, this);
ImageIO.write(bufferedImage,
outfile.substring(outfile.length() - 3,
outfile.length()), outputFile);
}
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
if(e.getSource() == colorMenuItem){
color = JColorChooser.showDialog(this, "Select your color",
Color.black);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == newMenuItem){
bufferedImage = new BufferedImage (300, 300,
BufferedImage.TYPE_INT_BGR );
image = createImage(300, 300);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
repaint();
}
if(e.getSource() == exitMenuItem){
System.exit(0);
}
}
public void itemStateChanged(ItemEvent e)
{
if(e.getSource() == linesMenuItem){
setFlagsFalse();
line = true;
linesMenuItem.setState(true);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == ellipsesMenuItem){
setFlagsFalse();
ellipse = true;
ellipsesMenuItem.setState(true);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == rectanglesMenuItem){
setFlagsFalse();
rectangle = true;
rectanglesMenuItem.setState(true);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == roundedMenuItem){
setFlagsFalse();
rounded = true;
roundedMenuItem.setState(true);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == freehandMenuItem){
setFlagsFalse();
draw = true;
freehandMenuItem.setState(true);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == solidMenuItem){
solid = !solid;
if(solid){
texture = false;
shade = false;
}
solidMenuItem.setState(solid);
gradientMenuItem.setState(shade);
textureMenuItem.setState(texture);
plainMenuItem.setState(false);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == gradientMenuItem){
shade = !shade;
if(shade){
solid = false;
texture = false;
}
solidMenuItem.setState(solid);
gradientMenuItem.setState(shade);
textureMenuItem.setState(texture);
plainMenuItem.setState(false);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == textureMenuItem){
texture = !texture;
if(texture){
shade = false;
solid = false;
}
solidMenuItem.setState(solid);
gradientMenuItem.setState(shade);
textureMenuItem.setState(texture);
plainMenuItem.setState(false);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == transparentMenuItem){
transparent = !transparent;
transparentMenuItem.setState(transparent);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == textMenuItem){
textDialog.setVisible(true);
drawText = textDialog.data;
setFlagsFalse();
text = true;
textMenuItem.setState(true);
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == thickMenuItem){
thick = thickMenuItem.getState();
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == plainMenuItem){
solidMenuItem.setState(false);
gradientMenuItem.setState(false);
textureMenuItem.setState(false);
transparentMenuItem.setState(false);
plainMenuItem.setState(true);
shade = false;
solid = false;
transparent = false;
texture = false;
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
if(e.getSource() == shadowMenuItem){
shadow = shadowMenuItem.getState();
start.x = -20;
start.y = -20;
end.x = -20;
end.y = -20;
}
}
void setFlagsFalse()
{
rounded = false;
line = false;
ellipse = false;
rectangle = false;
draw = false;
text = false;
linesMenuItem.setState(false);
ellipsesMenuItem.setState(false);
rectanglesMenuItem.setState(false);
roundedMenuItem.setState(false);
freehandMenuItem.setState(false);
textMenuItem.setState(false);
}
}
class OkCancelDialog extends Dialog implements ActionListener
{
Button ok, cancel;
TextField text;
public String data;
OkCancelDialog(Frame hostFrame, String title, boolean dModal)
{
super(hostFrame, title, dModal);
setSize(280, 100);
setLayout(new FlowLayout());
text = new TextField(30);
add(text);
ok = new Button("OK");
add(ok);
ok.addActionListener((ActionListener)this);
cancel = new Button("Cancel");
add(cancel);
cancel.addActionListener(this);
data = new String("");
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == ok){
data = text.getText();
} else {
data = "";
}
setVisible(false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -