JFC の おえかき。AdvertisementSwing + Java2D
追加機能。
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;
public class JfcPaint{
public static void main(String[] args){
MyFrame mf = new MyFrame();
mf.setTitle("ペイント");
mf.setSize(400, 400);
mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mf.show();
}
}
class MyFrame extends JFrame implements ActionListener{
private JMenuBar menuBar = new JMenuBar();
private JMenu file;
private JMenu edit;
private JMenu conf;
private JMenu help;
private JMenu figure;
private JMenu line;
private JMenu landf;
private JMenuItem open;
private JMenuItem save;
private JMenuItem quit;
private JMenuItem clear;
private JRadioButtonMenuItem fig_free;
private JRadioButtonMenuItem fig_line;
private JRadioButtonMenuItem fig_rect;
private JRadioButtonMenuItem fig_elli;
private JRadioButtonMenuItem fig_frec;
private JRadioButtonMenuItem fig_fell;
private JRadioButtonMenuItem fig_gra_fline;
private JRadioButtonMenuItem fig_gra_frec;
private JRadioButtonMenuItem fig_gra_fell;
private JRadioButtonMenuItem fig_gra_free;
private JRadioButtonMenuItem fig_tex_fline;
private JRadioButtonMenuItem fig_tex_frec;
private JRadioButtonMenuItem fig_tex_fell;
private JRadioButtonMenuItem fig_tex_free;
private ButtonGroup figGroup;
private JRadioButtonMenuItem line_size1;
private JRadioButtonMenuItem line_size2;
private JRadioButtonMenuItem line_size3;
private JRadioButtonMenuItem line_size4;
private JRadioButtonMenuItem line_size5;
private JRadioButtonMenuItem line_size6;
private JRadioButtonMenuItem line_size7;
private JRadioButtonMenuItem line_size8;
private JRadioButtonMenuItem line_size9;
private JRadioButtonMenuItem line_size10;
private ButtonGroup sizeGroup;
private JMenuItem color;
private JMenuItem color2;
private JMenuItem backcolor;
private JMenuItem ver;
private JRadioButtonMenuItem motif;
private JRadioButtonMenuItem windows;
private JRadioButtonMenuItem metal;
private ButtonGroup lfGroup;
private JCheckBoxMenuItem antialias;
private JColorChooser colorChooser;
private JFileChooser fileChooser;
private MyPanel panel;
public MyFrame(){
panel = new MyPanel();
getContentPane().add(panel);
setJMenuBar(createMenu());
}
private JMenuBar createMenu(){
menuBar = new JMenuBar();
file = new JMenu("ファイル");
edit = new JMenu("編集");
conf = new JMenu("設定");
help = new JMenu("ヘルプ");
figure = new JMenu("図形");
line = new JMenu("線の太さ");
landf = new JMenu("Look & Feel");
open = new JMenuItem("開く");
save = new JMenuItem("保存");
quit = new JMenuItem("終了");
color = new JMenuItem("描画色の選択");
color2 = new JMenuItem("補助色の選択");
backcolor = new JMenuItem("背景色の選択");
clear = new JMenuItem("画面消去");
ver = new JMenuItem("バージョン情報");
metal = new JRadioButtonMenuItem("metal", true);
motif = new JRadioButtonMenuItem("motif");
windows = new JRadioButtonMenuItem("windows");
lfGroup = new ButtonGroup();
fig_free = new JRadioButtonMenuItem("自由曲線", true);
fig_line = new JRadioButtonMenuItem("直線");
fig_rect = new JRadioButtonMenuItem("矩形");
fig_elli = new JRadioButtonMenuItem("楕円");
fig_frec = new JRadioButtonMenuItem("矩形(塗りつぶし)");
fig_fell = new JRadioButtonMenuItem("楕円(塗りつぶし)");
fig_gra_fline = new JRadioButtonMenuItem("直線(グラデーション)");
fig_gra_frec = new JRadioButtonMenuItem("矩形(グラデーション)");
fig_gra_fell = new JRadioButtonMenuItem("楕円(グラデーション)");
fig_gra_free = new JRadioButtonMenuItem("自由曲線(グラデーション)");
fig_tex_fline = new JRadioButtonMenuItem("直線(テクスチャ)");
fig_tex_frec = new JRadioButtonMenuItem("矩形(テクスチャ)");
fig_tex_fell = new JRadioButtonMenuItem("楕円(テクスチャ)");
fig_tex_free = new JRadioButtonMenuItem("自由曲線(テクスチャ)");
figGroup = new ButtonGroup();
line_size1 = new JRadioButtonMenuItem(" 1 px", true);
line_size2 = new JRadioButtonMenuItem(" 2 px");
line_size3 = new JRadioButtonMenuItem(" 3 px");
line_size4 = new JRadioButtonMenuItem(" 4 px");
line_size5 = new JRadioButtonMenuItem(" 5 px");
line_size6 = new JRadioButtonMenuItem(" 6 px");
line_size7 = new JRadioButtonMenuItem(" 7 px");
line_size8 = new JRadioButtonMenuItem(" 8 px");
line_size9 = new JRadioButtonMenuItem(" 9 px");
line_size10 = new JRadioButtonMenuItem("10 px");
sizeGroup = new ButtonGroup();
antialias = new JCheckBoxMenuItem("アンチエイリアス", false);
open.addActionListener(this);
save.addActionListener(this);
quit.addActionListener(this);
color.addActionListener(this);
color2.addActionListener(this);
backcolor.addActionListener(this);
antialias.addActionListener(this);
clear.addActionListener(this);
fig_free.addActionListener(this);
fig_line.addActionListener(this);
fig_rect.addActionListener(this);
fig_elli.addActionListener(this);
fig_frec.addActionListener(this);
fig_fell.addActionListener(this);
fig_gra_fline.addActionListener(this);
fig_gra_frec.addActionListener(this);
fig_gra_fell.addActionListener(this);
fig_gra_free.addActionListener(this);
fig_tex_fline.addActionListener(this);
fig_tex_frec.addActionListener(this);
fig_tex_fell.addActionListener(this);
fig_tex_free.addActionListener(this);
line_size1.addActionListener(this);
line_size2.addActionListener(this);
line_size3.addActionListener(this);
line_size4.addActionListener(this);
line_size5.addActionListener(this);
line_size6.addActionListener(this);
line_size7.addActionListener(this);
line_size8.addActionListener(this);
line_size9.addActionListener(this);
line_size10.addActionListener(this);
ver.addActionListener(this);
metal.addActionListener(this);
motif.addActionListener(this);
windows.addActionListener(this);
file.add(open);
file.add(save);
file.add(new JSeparator());
file.add(quit);
edit.add(clear);
figGroup.add(fig_free);
figGroup.add(fig_line);
figGroup.add(fig_rect);
figGroup.add(fig_elli);
figGroup.add(fig_frec);
figGroup.add(fig_fell);
figGroup.add(fig_gra_fline);
figGroup.add(fig_gra_frec);
figGroup.add(fig_gra_fell);
figGroup.add(fig_gra_free);
figGroup.add(fig_tex_fline);
figGroup.add(fig_tex_frec);
figGroup.add(fig_tex_fell);
figGroup.add(fig_tex_free);
figure.add(fig_free);
figure.add(fig_line);
figure.add(fig_rect);
figure.add(fig_elli);
figure.add(fig_frec);
figure.add(fig_fell);
figure.add(fig_gra_fline);
figure.add(fig_gra_frec);
figure.add(fig_gra_fell);
figure.add(fig_gra_free);
figure.add(fig_tex_fline);
figure.add(fig_tex_frec);
figure.add(fig_tex_fell);
figure.add(fig_tex_free);
sizeGroup.add(line_size1);
sizeGroup.add(line_size2);
sizeGroup.add(line_size3);
sizeGroup.add(line_size4);
sizeGroup.add(line_size5);
sizeGroup.add(line_size6);
sizeGroup.add(line_size7);
sizeGroup.add(line_size8);
sizeGroup.add(line_size9);
sizeGroup.add(line_size10);
line.add(line_size1);
line.add(line_size2);
line.add(line_size3);
line.add(line_size4);
line.add(line_size5);
line.add(line_size6);
line.add(line_size7);
line.add(line_size8);
line.add(line_size9);
line.add(line_size10);
conf.add(figure);
conf.add(line);
conf.add(new JSeparator());
conf.add(color);
conf.add(color2);
conf.add(backcolor);
conf.add(new JSeparator());
conf.add(antialias);
help.add(ver);
lfGroup.add(metal);
lfGroup.add(motif);
lfGroup.add(windows);
landf.add(metal);
landf.add(motif);
landf.add(windows);
help.add(landf);
menuBar.add(file);
menuBar.add(edit);
menuBar.add(conf);
menuBar.add(help);
return menuBar;
}
private void savePicture(){
if(fileChooser == null){
fileChooser = new JFileChooser();
}
try{
int returnVal = fileChooser.showSaveDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(panel.getVector());
oos.close();
fos.close();
}
}catch(IOException ioe){
System.err.println(ioe);
}
}
private void openPicture(){
if(fileChooser == null){
fileChooser = new JFileChooser();
}
try{
int returnVal = fileChooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
panel.setVector((Vector)ois.readObject());
ois.close();
fis.close();
panel.repaint();
}
}catch(IOException ioe){
System.err.println(ioe);
}catch(ClassNotFoundException cnfe){
System.err.println(cnfe);
}
}
private void chooseColor(){
if(colorChooser == null){
colorChooser = new JColorChooser();
}
panel.setColor(colorChooser.showDialog(
this, "描画色選択", panel.getColor()));
}
private void chooseColor2(){
if(colorChooser == null){
colorChooser = new JColorChooser();
}
panel.setColor2(colorChooser.showDialog(
this, "補助色選択", panel.getColor2()));
}
private void chooseBackColor(){
Vector temp = panel.getVector();
if(colorChooser == null){
colorChooser = new JColorChooser();
}
panel.setBackground(colorChooser.showDialog(
this, "背景色選択", panel.getBackground()));
}
public void actionPerformed(ActionEvent e){
//ファイルメニュー
if(e.getSource().equals(open)){
openPicture();
}else if(e.getSource().equals(save)){
savePicture();
}else if(e.getSource().equals(quit)){
System.exit(0);
}
//編集メニュー
if(e.getSource().equals(clear)){
panel.setVector(new Vector());
panel.repaint();
}
//設定メニュー
if(e.getSource().equals(fig_line)){
panel.setFigureFlag(0);
}else if(e.getSource().equals(fig_rect)){
panel.setFigureFlag(1);
}else if(e.getSource().equals(fig_elli)){
panel.setFigureFlag(2);
}else if(e.getSource().equals(fig_frec)){
panel.setFigureFlag(3);
}else if(e.getSource().equals(fig_fell)){
panel.setFigureFlag(4);
}else if(e.getSource().equals(fig_free)){
panel.setFigureFlag(5);
}else if(e.getSource().equals(fig_gra_fline)){
panel.setFigureFlag(6);
}else if(e.getSource().equals(fig_gra_frec)){
panel.setFigureFlag(7);
}else if(e.getSource().equals(fig_gra_fell)){
panel.setFigureFlag(8);
}else if(e.getSource().equals(fig_gra_free)){
panel.setFigureFlag(9);
}else if(e.getSource().equals(fig_tex_fline)){
panel.setFigureFlag(10);
}else if(e.getSource().equals(fig_tex_frec)){
panel.setFigureFlag(11);
}else if(e.getSource().equals(fig_tex_fell)){
panel.setFigureFlag(12);
}else if(e.getSource().equals(fig_tex_free)){
panel.setFigureFlag(13);
}else if(e.getSource().equals(antialias)){
panel.setAntialias(!panel.getAntialias());
panel.repaint();
}else if(e.getSource().equals(color)){
chooseColor();
}else if(e.getSource().equals(color2)){
chooseColor2();
}else if(e.getSource().equals(backcolor)){
chooseBackColor();
}else if(e.getSource().equals(line_size1)){
panel.setLineSize(1);
}else if(e.getSource().equals(line_size2)){
panel.setLineSize(2);
}else if(e.getSource().equals(line_size3)){
panel.setLineSize(3);
}else if(e.getSource().equals(line_size4)){
panel.setLineSize(4);
}else if(e.getSource().equals(line_size5)){
panel.setLineSize(5);
}else if(e.getSource().equals(line_size6)){
panel.setLineSize(6);
}else if(e.getSource().equals(line_size7)){
panel.setLineSize(7);
}else if(e.getSource().equals(line_size8)){
panel.setLineSize(8);
}else if(e.getSource().equals(line_size9)){
panel.setLineSize(9);
}else if(e.getSource().equals(line_size10)){
panel.setLineSize(10);
}
//ヘルプメニュー
if(e.getSource().equals(ver)){
JOptionPane.showMessageDialog(getContentPane(), "おえかき\nバージョン 1.0");
}else if(e.getSource().equals(metal)){
try{
UIManager.setLookAndFeel(
"javax.swing.plaf.metal.MetalLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception ex){
System.out.println("Error L&F Setting");
}
}else if(e.getSource().equals(motif)){
try{
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.motif.MotifLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception ex){
System.out.println("Error L&F Setting");
}
}else if(e.getSource().equals(windows)){
try{
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception ex){
System.out.println("Error L&F Setting");
}
}
}
}
class MyPanel extends JPanel implements MouseMotionListener, MouseListener{
private float x;
private float y;
private float ex;
private float ey;
private int figureFlag;
private boolean dragFlag;
private boolean antialiasFlag;
private Color col;
private Color col2;
private float size;
private BufferedImage image;
private Vector pictureData = new Vector();
public MyPanel(){
col = Color.black;
col2 = Color.cyan;
antialiasFlag = false;
dragFlag = false;
figureFlag = 5;
size = 1.0f;
try{
image = ImageIO.read(new File("./sample.jpg"));
}catch(Exception e){
System.out.println("IOError");
System.exit(-1);
}
setBackground(Color.white);
addMouseListener(this);
addMouseMotionListener(this);
}
public void setLineSize(float f){
size = f;
}
public float getLineSize(){
return size;
}
public void setAntialias(boolean b){
antialiasFlag = b;
}
public boolean getAntialias(){
return antialiasFlag;
}
public void setFigureFlag(int n){
figureFlag = n;
}
public int getFigureFlag(){
return figureFlag;
}
public void setColor(Color c){
col = c;
}
public Color getColor(){
return col;
}
public void setColor2(Color c){
col2 = c;
}
public Color getColor2(){
return col2;
}
public void setVector(Vector v){
pictureData = v;
}
public Vector getVector(){
return pictureData;
}
public void paint(Graphics g){
super.paint(g);
//情報
g.setColor(col2);
g.fillRect(0, 0, 10, 10);
g.setColor(Color.black);
g.drawRect(0, 0, 10, 10);
g.setColor(col);
g.fillRect(5, 5, 10, 10);
g.setColor(Color.black);
g.drawRect(5, 5, 10, 10);
g.drawImage((Image)image, 30, 0, 20, 20, this);//ImageObserver observer)
//情報ここまで
Graphics2D g2 = (Graphics2D)g;
if(antialiasFlag){
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
}
for(int i = 0; i < pictureData.size(); i++){
((Figure)pictureData.elementAt(i)).Draw(g2);
}
if(dragFlag){
g2.setColor(col);
if(figureFlag == 0){
g2.setStroke(new BasicStroke(size));
g2.draw(new Line2D.Double(x, y, ex, ey));
}else if(figureFlag == 1){
g2.setStroke(new BasicStroke(size));
g2.draw(new Rectangle2D.Double(
x<ex?x:ex, y<ey?y:ey,Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 2){
g2.setStroke(new BasicStroke(size));
g2.draw(new Ellipse2D.Double(
x<ex?x:ex, y<ey?y:ey,Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 3){
g2.setStroke(new BasicStroke(size));
g2.fill(new Rectangle2D.Double(
x<ex?x:ex, y<ey?y:ey,Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 4){
g2.setStroke(new BasicStroke(size));
g2.fill(new Ellipse2D.Double(
x<ex?x:ex, y<ey?y:ey,Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 6){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.setPaint(new GradientPaint(x, y, col, ex, ey, col2, true));
g2.draw(new Line2D.Double(x, y, ex, ey));
}else if(figureFlag == 7){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new GradientPaint(x<ex?x:ex, y<ey?y:ey,
col, Math.abs(x-ex), Math.abs(y-ey), col2, true));
g2.fill(new Rectangle2D.Double(
x<ex?x:ex, y<ey?y:ey,Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 8){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new GradientPaint(x<ex?x:ex, y<ey?y:ey,
col, Math.abs(x-ex), Math.abs(y-ey), col2, true));
g2.fill(new Ellipse2D.Double(
x<ex?x:ex, y<ey?y:ey,Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 10){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new TexturePaint(image, new Rectangle2D.Double(
0, 0, image.getWidth(), image.getHeight())));
g2.draw(new Line2D.Double(x, y, ex, ey));
}else if(figureFlag == 11){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new TexturePaint(image, new Rectangle2D.Double(
0, 0, image.getWidth(), image.getHeight())));
g2.fill(new Rectangle2D.Double(
x<ex?x:ex, y<ey?y:ey, Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 12){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new TexturePaint(image, new Rectangle2D.Double(
0, 0, image.getWidth(), image.getHeight())));
g2.fill(new Ellipse2D.Double(
x<ex?x:ex, y<ey?y:ey, Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 14){
g2.setColor(getBackground());
g2.fill(new Rectangle2D.Double(
x<ex?x:ex, y<ey?y:ey, Math.abs(x-ex), Math.abs(y-ey)));
}else if(figureFlag == 15){
g2.setColor(getBackground());
g2.fill(new Ellipse2D.Double(
x<ex?x:ex, y<ey?y:ey, Math.abs(x-ex), Math.abs(y-ey)));
}
}
}
public void mouseDragged(MouseEvent e){
ex = e.getX();
ey = e.getY();
if(figureFlag == 5){
((FreeLineData)pictureData.elementAt(
pictureData.size()-1)).addPoint(x, y, ex, ey);
x = ex;
y = ey;
}else if(figureFlag == 9){
((GradientFreeLineData)pictureData.elementAt(
pictureData.size()-1)).addPoint(x, y, ex, ey);
x = ex;
y = ey;
}else if(figureFlag == 13){
((TextureFreeLineData)pictureData.elementAt(
pictureData.size()-1)).addPoint(x, y, ex, ey);
x = ex;
y = ey;
}
repaint();
}
public void mousePressed(MouseEvent e){
x = e.getX();
y = e.getY();
dragFlag = true;
if(figureFlag == 5){
pictureData.addElement(new FreeLineData(col, size));
}else if(figureFlag == 9){
pictureData.addElement(new GradientFreeLineData(col, size, col2));
}else if(figureFlag == 13){
pictureData.addElement(new TextureFreeLineData(col, size, image));
}
}
public void mouseReleased(MouseEvent e){
dragFlag = false;
if(figureFlag == 0){
pictureData.addElement(
new LineData(x, y, e.getX(), e.getY(), col, size));
}else if(figureFlag == 1){
pictureData.addElement(
new RectData(x, y, e.getX(), e.getY(), col, size));
}else if(figureFlag == 2){
pictureData.addElement(
new ellipseData(x, y, e.getX(), e.getY(), col, size));
}else if(figureFlag == 3){
pictureData.addElement(
new FillRectData(x, y, e.getX(), e.getY(), col, size));
}else if(figureFlag == 4){
pictureData.addElement(
new FillellipseData(x, y, e.getX(), e.getY(), col, size));
}else if(figureFlag == 6){
pictureData.addElement(
new GradientLineData(x, y, e.getX(), e.getY(),
col, size, col2));
}else if(figureFlag == 7){
pictureData.addElement(
new GradientFillRectData(x, y, e.getX(), e.getY(),
col, size, col2));
}else if(figureFlag == 8){
pictureData.addElement(
new GradientFillellipseData(x, y, e.getX(), e.getY(),
col, size, col2));
}else if(figureFlag == 10){
pictureData.addElement(
new TextureLineData(x, y, e.getX(), e.getY(),
col, size, image));
}else if(figureFlag == 11){
pictureData.addElement(
new TextureFillRectData(x, y, e.getX(), e.getY(),
col, size, image));
}else if(figureFlag == 12){
pictureData.addElement(
new TextureFillellipseData(x, y, e.getX(), e.getY(),
col, size, image));
}
repaint();
}
public void mouseClicked(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
}
abstract class Figure implements Serializable{
protected float sx;
protected float sy;
protected float ex;
protected float ey;
protected Color col;
protected float size;
public Figure(){};
public Figure(float x1, float y1, float x2, float y2, Color c, float s){
sx = x1;
sy = y1;
ex = x2;
ey = y2;
col = c;
size = s;
}
public void setColor(Color c){
col = c;
}
abstract void Draw(Graphics2D g2);
}
class LineData extends Figure{
public LineData(float x1, float y1, float x2, float y2, Color c, float s){
super(x1, y1, x2, y2, c, s);
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.draw(new Line2D.Double(sx, sy, ex, ey));
}
}
class RectData extends Figure{
public RectData(float x1, float y1, float x2, float y2, Color c, float s){
super(x1, y1, x2, y2, c, s);
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.draw(new Rectangle2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class ellipseData extends Figure{
public ellipseData(float x1, float y1, float x2, float y2, Color c, float s){
super(x1, y1, x2, y2, c, s);
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.draw(new Ellipse2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class FillRectData extends Figure{
public FillRectData(float x1, float y1, float x2, float y2, Color c, float s){
super(x1, y1, x2, y2, c, s);
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.fill(new Rectangle2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class FillellipseData extends Figure{
public FillellipseData(float x1, float y1, float x2, float y2, Color c, float s){
super(x1, y1, x2, y2, c, s);
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.fill(new Ellipse2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class FreeLineData extends Figure{
Vector v = new Vector();
public FreeLineData(Color c, float s){
col = c;
size = s;
}
public void addPoint(float x1, float y1, float x2, float y2){
v.addElement(new LineData(x1, y1, x2, y2, col, size));
}
public void Draw(Graphics2D g2){
for(int i = 0; i < v.size(); i++){
((LineData)v.elementAt(i)).Draw(g2);
}
}
}
class GradientLineData extends Figure{
private Color col2;
public GradientLineData(float x1, float y1, float x2, float y2,
Color c, float s, Color c2){
super(x1, y1, x2, y2, c, s);
col2 = c2;
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.setPaint(new GradientPaint(sx<ex?sx:ex, sy<ey?sy:ey,
col, Math.abs(sx-ex), Math.abs(sy-ey), col2, true));
g2.draw(new Line2D.Double(sx, sy, ex, ey));
}
}
class GradientFillRectData extends Figure{
private Color col2;
public GradientFillRectData(float x1, float y1, float x2, float y2,
Color c, float s, Color c2){
super(x1, y1, x2, y2, c, s);
col2 = c2;
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.setPaint(new GradientPaint(sx<ex?sx:ex, sy<ey?sy:ey,
col, Math.abs(sx-ex), Math.abs(sy-ey), col2, true));
g2.fill(new Rectangle2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class GradientFillellipseData extends Figure{
private Color col2;
public GradientFillellipseData(float x1, float y1, float x2, float y2,
Color c, float s, Color c2){
super(x1, y1, x2, y2, c, s);
col2 = c2;
}
public void Draw(Graphics2D g2){
g2.setColor(col);
g2.setStroke(new BasicStroke(size));
g2.setPaint(new GradientPaint(sx<ex?sx:ex, sy<ey?sy:ey,
col, Math.abs(sx-ex), Math.abs(sy-ey), col2, true));
g2.fill(new Ellipse2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class GradientFreeLineData extends Figure{
private Vector v = new Vector();
private BufferedImage image;
private Color col2;
public GradientFreeLineData(Color c, float s, Color c2){
col = c;
col2 = c2;
size = s;
}
public void addPoint(float x1, float y1, float x2, float y2){
v.addElement(new GradientLineData(x1, y1, x2, y2, col, size, col2));
}
public void Draw(Graphics2D g2){
for(int i = 0; i < v.size(); i++){
((GradientLineData)v.elementAt(i)).Draw(g2);
}
}
}
class TextureLineData extends Figure{
private BufferedImage image;
public TextureLineData(float x1, float y1, float x2, float y2,
Color c, float s, BufferedImage img){
super(x1, y1, x2, y2, c, s);
image = img;
}
public void Draw(Graphics2D g2){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new TexturePaint(image,
new Rectangle2D.Double(0, 0, image.getWidth(), image.getHeight())));
g2.draw(new Line2D.Double(sx, sy, ex, ey));
}
}
class TextureFillRectData extends Figure{
private BufferedImage image;
public TextureFillRectData(float x1, float y1, float x2, float y2,
Color c, float s, BufferedImage img){
super(x1, y1, x2, y2, c, s);
image = img;
}
public void Draw(Graphics2D g2){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new TexturePaint(image,
new Rectangle2D.Double(0, 0, image.getWidth(), image.getHeight())));
g2.fill(new Rectangle2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class TextureFillellipseData extends Figure{
private BufferedImage image;
public TextureFillellipseData(float x1, float y1, float x2, float y2,
Color c, float s, BufferedImage img){
super(x1, y1, x2, y2, c, s);
image = img;
}
public void Draw(Graphics2D g2){
g2.setStroke(new BasicStroke(size));
g2.setPaint(new TexturePaint(image,
new Rectangle2D.Double(0, 0, image.getWidth(), image.getHeight())));
g2.fill(new Ellipse2D.Double(
sx<ex?sx:ex, sy<ey?sy:ey, Math.abs(sx-ex), Math.abs(sy-ey)));
}
}
class TextureFreeLineData extends Figure{
Vector v = new Vector();
BufferedImage image;
public TextureFreeLineData(Color c, float s, BufferedImage img){
col = c;
size = s;
image = img;
}
public void addPoint(float x1, float y1, float x2, float y2){
v.addElement(new TextureLineData(x1, y1, x2, y2, col, size, image));
}
public void Draw(Graphics2D g2){
for(int i = 0; i < v.size(); i++){
((TextureLineData)v.elementAt(i)).Draw(g2);
}
}
}
![]() そろそろクラスごとにソースわけないと意味不明。 Advertisement |
ショートカット・634トップページ・このカテゴリのトップページに戻る ・634ラボ UIコレクションギャラリー サイト検索Y!ログール |