【 課題 】お絵描きソフトを作る。
宿題スレPart54 No.20 http://pc8.2ch.net/test/read.cgi/tech/1133778112/20
宿題スレPart53 No.970 http://pc8.2ch.net/test/read.cgi/tech/1123639475/970
// // javac Bmp2Jpeg.java // java Bmp2Jpeg output.jpg // import java.io.*; import java.awt.image.*; import javax.imageio.*; import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowEvent; import java.awt.event.WindowAdapter; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseMotionAdapter; public class Bmp2Jpeg extends JFrame{ final static String prod = "★★ Java の宿題ここで答えます Part 54 ★★"; final static String ver = "1.0.0"; final static String usage = "Usage: Bmp2Jpeg outfile.jpg"; final static int rectW = 160; final static int rectH = 120; Bmp2JpegCanvas canvas; public static void main(String[] args){ if(args.length <= 0){ System.out.println(usage); }else if(args[0].length() <= 0){ System.out.println(usage); }else{ Bmp2Jpeg b2j = new Bmp2Jpeg(args[0]); b2j.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } } Bmp2Jpeg(String f){ MenuBar menubar = new MenuBar(); setJMenuBar(menubar); setResizable(false); canvas = new Bmp2JpegCanvas(f, rectW, rectH); getContentPane().add(canvas); pack(); setBounds(0, 0, rectW + 8, rectH + 50); setVisible(true); } class MenuBar extends JMenuBar{ Listener_Command listener_Command; final String Menu_File = "MF"; final String Menu_Help = "MH"; MenuBar(){ listener_Command = new Listener_Command(); JMenu menu1 = new JMenu("ファイル"); JMenuItem item1 = new JMenuItem("保存(Ctrl+Shift+s)"); item1.setActionCommand(Menu_File); item1.addActionListener(listener_Command); item1.setAccelerator(KeyStroke.getKeyStroke("ctrl shift S")); menu1.add(item1); add(menu1); JMenu menu2 = new JMenu("ヘルプ"); JMenuItem item2 = new JMenuItem("バージョン情報(Ctrl+Shift+v)"); item2.setActionCommand(Menu_Help); item2.addActionListener(listener_Command); item2.setAccelerator(KeyStroke.getKeyStroke("ctrl shift V")); menu2.add(item2); add(menu2); } class Listener_Command implements ActionListener{ public void actionPerformed(ActionEvent e){ String str = e.getActionCommand(); if(str.compareTo(Menu_File) == 0){ canvas.Save(); }else if(str.compareTo(Menu_Help) == 0){ JOptionPane.showMessageDialog( null, "Bmp2Jpeg\nProduced by " + prod + "\nversion " + ver, "Version情報", JOptionPane.INFORMATION_MESSAGE ); } } } } } class Bmp2JpegCanvas extends Canvas{ String file; BufferedImage bi; Graphics bg; Listener_MouseMotion listener_MouseMotion; Listener_MouseClick listener_MouseClick; int px = 0, py = 0, nx = 0, ny = 0, clk = 0; Bmp2JpegCanvas(String f, int w, int h){ file = f; bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_BGR); if(bi != null){ bg = bi.getGraphics(); bg.setColor(Color.white); bg.fillRect(0, 0, w, h); listener_MouseMotion = new Listener_MouseMotion(); listener_MouseClick = new Listener_MouseClick(); addMouseListener(listener_MouseClick); addMouseMotionListener(listener_MouseMotion); } } public void Save(){ try{ if(bi != null && file != null){ ImageIO.write(bi, "jpeg", new File(file)); } }catch(Exception e){ e.printStackTrace(); } } public void paint(Graphics g){ Graphics2D g2 = (Graphics2D)g; g2.drawImage(bi, 0, 0, this); } class Listener_MouseMotion extends MouseMotionAdapter{ public void mouseMoved(MouseEvent e){ if(clk == 1){ bg.setColor(Color.white); bg.drawRect(px, py, nx - px, ny - py); nx = e.getX(); ny = e.getY(); bg.setColor(Color.green); bg.drawRect(px, py, nx - px, ny - py); repaint(); } } } class Listener_MouseClick extends MouseAdapter{ public void mouseClicked(MouseEvent e){ if(javax.swing.SwingUtilities.isLeftMouseButton(e)){ if(clk == 0){ px = e.getX(); py = e.getY(); clk = 1; }else{ bg.setColor(Color.blue); bg.drawRect(px, py, nx - px, ny - py); clk = 0; } repaint(); }else if(javax.swing.SwingUtilities.isRightMouseButton(e)){ Dimension d = getSize(); bg.setColor(Color.white); bg.fillRect(0, 0, d.width, d.height); repaint(); } } } }