• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            coreBugZJ

            此 blog 已棄。

            畫板 Java實現(xiàn)

            也是剛剛從郵箱里發(fā)現(xiàn)的古董。。。



            我的代碼:

              1 // ubuntu  windows endl
              2 
              3 import java.awt.*;
              4 import java.awt.event.*;
              5 import java.awt.image.*;
              6 import java.io.*;
              7 import javax.swing.*;
              8 import javax.imageio.*;
              9 
             10 class PainterCanvas extends Canvas {
             11 
             12         public PainterCanvas( Color foregroundColor, int initPaintType, float lineWidth, float [] dashArray, float dashPhase, Dimension size ) {
             13                 setColor( foregroundColor );
             14                 setBackground( COLOR_BACK );
             15                 paintType = LINE;
             16                 setPaintType( initPaintType );
             17                 paintStroke = new BasicStroke();
             18                 setLineWidth( lineWidth );
             19                 setLineDash( dashArray, dashPhase );
             20                 setBufferedDimension( size );
             21                 startX = startY = endX = endY = 0;
             22                 drawBuffer = false;
             23                 pressed = false
             24                 setCursor( Cursor.getPredefinedCursor( Cursor.CROSSHAIR_CURSOR ) );
             25                 addMouseListener( new 
             26                         MouseAdapter() {
             27                                 public void mousePressed( MouseEvent me ) {
             28                                         if ( ! pressed ) {
             29                                                 startX  = me.getX();
             30                                                 startY  = me.getY();
             31                                                 pressed = true;
             32                                         }
             33                                 }
             34                                 public void mouseReleased( MouseEvent me ) {
             35                                         if ( pressed ) {
             36                                                 endX = me.getX();
             37                                                 endY = me.getY();
             38                                                 pressed = false;
             39                                                 drawBuffer = true;
             40                                                 repaint();
             41                                         }
             42                                 }
             43                         }
             44                 );
             45                 addMouseMotionListener( new MouseMotionAdapter() {
             46                         public void mouseDragged( MouseEvent me ) {
             47                                 endX = me.getX();
             48                                 endY = me.getY();
             49                                 repaint();
             50                         }
             51                 } );
             52         }
             53 
             54         public void setPaintType( int t ) {
             55                 if ( ( t == LINE )  || ( t == TRIA ) || ( t == OVAL ) || ( t == RECT ) ) {
             56                         paintType = t;
             57                 }
             58         }
             59 
             60         public void setColor( Color col ) {
             61                 colorFore = col;
             62         }
             63 
             64         public void setLineWidth( float lineWidth ) {
             65                 if ( lineWidth > 0.0f ) {
             66                         paintStroke = new BasicStroke( lineWidth, paintStroke.getEndCap(), 
             67                                                         paintStroke.getLineJoin(), paintStroke.getMiterLimit(), 
             68                                                         paintStroke.getDashArray(), paintStroke.getDashPhase() );
             69                 }
             70         }
             71 
             72         public void setLineDash( float [] dashArray, float dashPhase ) {
             73                 paintStroke = new BasicStroke( paintStroke.getLineWidth(), paintStroke.getEndCap(), 
             74                                                 paintStroke.getLineJoin(), paintStroke.getMiterLimit(), 
             75                                                 dashArray, dashPhase );
             76         }
             77 
             78         public void setBufferedDimension( Dimension size ) {
             79                 setSize( size );
             80                 dimSize = size;
             81                 img     = new BufferedImage( dimSize.width, dimSize.height, BufferedImage.TYPE_4BYTE_ABGR );
             82                 graImg  = img.createGraphics();
             83                 graImg.setColor( COLOR_BACK );
             84                 graImg.fillRect( 00, dimSize.width, dimSize.height );
             85         }
             86 
             87         public void setBufferedImage( BufferedImage bufImg ) {
             88                 dimSize.width  = bufImg.getWidth();
             89                 dimSize.height = bufImg.getHeight();
             90                 setSize( dimSize );
             91                 img    = bufImg;
             92                 graImg = img.createGraphics();
             93         }
             94 
             95         public Color getColor() {
             96                 return colorFore;
             97         }
             98 
             99         public BufferedImage getBufferedImage() {
            100                 return img;
            101         }
            102 
            103         public void paint( Graphics g ) {
            104                 g.drawImage( img, 00, dimSize.width, dimSize.height, this );
            105                 paintUpdate( g );
            106         }
            107         
            108         public void update( Graphics g ) {
            109                 g.drawImage( img, 00, dimSize.width, dimSize.height, this );
            110                 paintUpdate( g );
            111         }
            112 
            113         public void paintUpdate( Graphics gra ) {
            114                 Graphics2D g = (Graphics2D)gra;
            115                 g.setColor( colorFore );
            116                 g.setStroke( paintStroke );
            117                 graImg.setColor( colorFore );
            118                 graImg.setStroke( paintStroke );
            119                 int x = Math.min( startX, endX );
            120                 int y = Math.min( startY, endY );
            121                 int w = startX + endX - x - x;
            122                 int h = startY + endY - y - y;
            123                 switch ( paintType ) {
            124                         case LINE :
            125                                 g.drawLine( startX, startY, endX, endY );
            126                                 if ( drawBuffer ) {
            127                                         graImg.drawLine( startX, startY, endX, endY );
            128                                 }
            129                                 break;
            130                         case TRIA :
            131                                 g.drawPolygon( new int[]{ startX, x, endX }, new int[]{ startY, ( startY + endY ) / 2, endY }, 3 );
            132                                 if ( drawBuffer ) {
            133                                         graImg.drawPolygon( new int[]{ startX, x, endX }, new int[]{ startY, ( startY + endY ) / 2, endY }, 3 );
            134                                 }
            135                                 break;
            136                         case OVAL :
            137                                 g.drawOval( x, y, w, h );
            138                                 if ( drawBuffer ) {
            139                                         graImg.drawOval( x, y, w, h );
            140                                 }
            141                                 break;
            142                         case RECT :
            143                                 g.drawRect( x, y, w, h );
            144                                 if ( drawBuffer ) {
            145                                         graImg.drawRect( x, y, w, h );
            146                                 }
            147                                 break;
            148                 }
            149                 drawBuffer = false;
            150         }
            151 
            152         private int             startX, startY, endX, endY, paintType;
            153         private Color           colorFore;
            154         private boolean         pressed, drawBuffer;
            155         private BasicStroke     paintStroke;
            156         private Graphics2D      graImg;
            157         private BufferedImage   img;
            158         private Dimension       dimSize;
            159 
            160         private static final Color COLOR_BACK = Color.WHITE;
            161         public  static final int   LINE = 0, TRIA = 1, OVAL = 2, RECT = 3;
            162 
            163 }
            164 
            165 
            166 //------------------------------------------------------------------------------------------
            167 
            168 
            169 class PainterWin extends Frame implements ActionListener, ItemListener {
            170 
            171         public PainterWin() {
            172                 super"畫板 --- 趙杰" );
            173                 initFrame();
            174                 initMenu();
            175                 initTool();
            176                 initCanvas();
            177                 setVisible( true );
            178                 validate();
            179         }
            180 
            181         public void actionPerformed( ActionEvent ae ) {
            182                 Object obj = ae.getSource();
            183                 if ( obj == menuNew ) {
            184                         onMenuNew();
            185                 }
            186                 else if ( obj == menuOpen ) {
            187                         onMenuOpen();
            188                 }
            189                 else if ( obj == menuSave ) {
            190                         onMenuSave();
            191                 }
            192                 else if ( obj == menuExit ) {
            193                         onMenuExit();
            194                 }
            195                 else if ( obj == butLine ) {
            196 
            197                         canvas.setPaintType( PainterCanvas.LINE );
            198                 }
            199                 else if ( obj == butTria ) {
            200                         canvas.setPaintType( PainterCanvas.TRIA );
            201                 }
            202                 else if ( obj == butOval ) {
            203                         canvas.setPaintType( PainterCanvas.OVAL );
            204                 }
            205                 else if ( obj == butRect ) {
            206                         canvas.setPaintType( PainterCanvas.RECT );
            207                 }
            208         }
            209 
            210         public void itemStateChanged( ItemEvent ie ) {
            211                 Object obj = ie.getSource();
            212                 if ( obj == choLineType ) {
            213                         onChoiceLineType();
            214                 }
            215                 else if ( obj == choLineWidth ) {
            216                         onChoiceLineWidth();
            217                 }
            218                 else if ( obj == choColor ) {
            219                         onChoiceColor();
            220                 }
            221         }
            222 
            223         private void initFrame() {
            224                 setBounds( 300200600500 );
            225                 addWindowListener( new WindowAdapter() {
            226                                                 public void windowClosing( WindowEvent we ) {
            227                                                         onExit();
            228                                                 }
            229                                        }
            230                 );
            231                 setLayout( new BorderLayout() ); // default
            232         }
            233 
            234         private MenuItem newMenuItem( Menu menu, String label, MenuShortcut sc ) {
            235                 MenuItem item = new MenuItem( label, sc );
            236                 item.addActionListener( this );
            237                 menu.add( item );
            238                 return item;
            239         }
            240 
            241         private void initMenu() {
            242                 MenuBar menuBar = new MenuBar();
            243                 Menu    menu    = new Menu( "文件" );
            244                 menuNew    = newMenuItem( menu, "新建"new MenuShortcut( KeyEvent.VK_N ) );
            245                 menuOpen   = newMenuItem( menu, "打開"new MenuShortcut( KeyEvent.VK_O ) );
            246                 menuSave   = newMenuItem( menu, "保存"new MenuShortcut( KeyEvent.VK_S ) );
            247                 menuExit   = newMenuItem( menu, "退出"new MenuShortcut( KeyEvent.VK_E ) );
            248                 menuBar.add( menu );
            249                 setMenuBar( menuBar );
            250         }
            251 
            252         private Choice newChoice( Panel pan, String label ) {
            253                 Choice cho = new Choice();
            254                 cho.addItemListener( this );
            255                 pan.add( new Label( label ) );
            256                 pan.add( cho );
            257                 return cho;
            258         }
            259 
            260         private Button newButton( Panel pan, String label ) {
            261                 Button but = new Button( label );
            262                 but.addActionListener( this );
            263                 pan.add( but );
            264                 return but;
            265         }
            266 
            267         private void initTool() {
            268                 Panel pan = new Panel();
            269                 pan.setLayout( new FlowLayout( FlowLayout.CENTER, 101 ) );
            270 
            271                 choLineType = newChoice( pan, "線條" );
            272                 choLineType.add( "實線" );
            273                 choLineType.add( "虛線" );
            274                 choLineType.select( 0 );
            275 
            276                 choLineWidth = newChoice( pan, "線寬" );
            277                 choLineWidth.add( "1" );
            278                 choLineWidth.add( "4" );
            279                 choLineWidth.select( 0 );
            280 
            281                 choColor = newChoice( pan, "顏色" );
            282                 choColor.add( "" );
            283                 choColor.add( "" );
            284                 choColor.add( "自定義" );
            285                 choColor.select( 0 );
            286 
            287                 butLine = newButton( pan, "直線" );
            288                 butTria = newButton( pan, "三角形" );
            289                 butOval = newButton( pan, "" );
            290                 butRect = newButton( pan, "矩形" );
            291 
            292                 add( pan, BorderLayout.NORTH );
            293         }
            294 
            295         private void initCanvas() {
            296                 float [] dashArray = new float[]{ 1.0f0.0f };
            297                 canvas = new PainterCanvas( Color.BLACK, PainterCanvas.LINE, 1.0f, dashArray, 0.0fnew Dimension( 600400 ) );
            298                 pl = new Panel( null );
            299                 pl.add( canvas );
            300                 canvas.setBounds( 00, canvas.getSize().width, canvas.getSize().height );
            301                 pl.setBounds( 00, canvas.getSize().width, canvas.getSize().height );
            302                 if ( pane != null ) {
            303                         remove( pane );
            304                 }
            305                 pane = new JScrollPane( pl );
            306                 add( pane, BorderLayout.CENTER );
            307         }
            308 
            309         private void onMenuNew() {
            310                 if ( onLeaveButCancel() ) {
            311                         return;
            312                 }
            313                 initCanvas();
            314                 validate();
            315         }
            316 
            317         private void onMenuOpen() {
            318                 if ( onLeaveButCancel() ) {
            319                         return;
            320                 }
            321                 JFileChooser fc = new JFileChooser();
            322                 int cho = fc.showOpenDialog( this );
            323                 if ( cho == JFileChooser.APPROVE_OPTION ) {
            324                         file = fc.getSelectedFile();
            325                         BufferedImage img;
            326                         try {
            327                                  img = ImageIO.read( file );
            328                         }
            329                         catch ( IOException ex ) {
            330                                 JOptionPane.showMessageDialog( this"圖像載入失敗!" );
            331                                 file = null;
            332                                 return;
            333                         }
            334                         pl.setSize( img.getWidth(), img.getHeight() );
            335                         canvas.setBufferedImage( img );
            336                         file = null;
            337                 }
            338         }
            339 
            340         private boolean onLeaveButCancel() {
            341                 int cho = JOptionPane.showConfirmDialog( this"保存當前圖片?" );
            342                 switch ( cho ) {
            343                         case JOptionPane.YES_OPTION :
            344                                 onSave();
            345                         case JOptionPane.NO_OPTION : 
            346                                 file = null;
            347                                 return false;
            348                 }
            349                 return true;
            350         }
            351 
            352         private void onMenuSave() {
            353                 onSave();
            354         }
            355 
            356         private void onSave() {
            357                 if ( file == null ) {
            358                         JFileChooser fc = new JFileChooser();
            359                         int cho = fc.showSaveDialog( this );
            360                         if ( cho == JFileChooser.APPROVE_OPTION ) {
            361                                 file = fc.getSelectedFile();
            362                         }
            363                 }
            364                 if ( file != null ) {
            365                         try {
            366                                 ImageIO.write( canvas.getBufferedImage(), "PNG", file );
            367                         }
            368                         catch ( IOException ex ) {
            369                                 JOptionPane.showMessageDialog( this"保存失敗!" );
            370                         }
            371                 }
            372         }
            373 
            374         private void onMenuExit() {
            375                 onExit();
            376         }
            377 
            378         private void onExit() {
            379                 if ( ! onLeaveButCancel() ) {
            380                         System.exit( 0 );
            381                 }
            382         }
            383 
            384         private void onChoiceLineType() {
            385                 float [] da;
            386                 switch ( choLineType.getSelectedIndex() ) {
            387                         case 0 :
            388                                 da = new float[]{ 1.0f0.0f };
            389                                 canvas.setLineDash( da, 0.0f );
            390                                 break;
            391                         case 1 :
            392                                 da = new float[]{ 4.0f8.0f };
            393                                 canvas.setLineDash( da, 0.0f );
            394                                 break;
            395                 }
            396         }
            397 
            398         private void onChoiceLineWidth() {
            399                 switch ( choLineWidth.getSelectedIndex() ) {
            400                         case 0 :
            401                                 canvas.setLineWidth( 1.0f );
            402                                 break;
            403                         case 1 :
            404                                 canvas.setLineWidth( 4.0f );
            405                                 break;
            406                 }
            407         }
            408 
            409         private void onChoiceColor() {
            410                 switch ( choColor.getSelectedIndex() ) {
            411                         case 0 :
            412                                 canvas.setColor( Color.BLACK );
            413                                 break;
            414                         case 1 :
            415                                 canvas.setColor( Color.RED );
            416                                 break;
            417                         case 2 :
            418                                 canvas.setColor( JColorChooser.showDialog( this"自定義顏色", canvas.getColor() ) );
            419                                 break;
            420                 }
            421         }
            422 
            423         private MenuItem       menuNew, menuOpen, menuSave, menuExit;
            424         private Choice         choLineType, choLineWidth, choColor;
            425         private Button         butLine, butTria, butOval, butRect;
            426         private PainterCanvas  canvas;
            427         private Panel          pl;
            428         private JScrollPane    pane = null;
            429         private File           file = null;
            430 
            431 }
            432 
            433 
            434 //------------------------------------------------------------------------------------------
            435 
            436 
            437 public class Painter {
            438 
            439         public static void main( String [] args ) {
            440                 new PainterWin();
            441         }
            442 
            443 }
            444 
            445 

             

            posted on 2011-06-09 20:03 coreBugZJ 閱讀(2733) 評論(0)  編輯 收藏 引用 所屬分類: ProgrammingLanguage

            亚洲精品第一综合99久久| 国产精品美女久久久网AV| 久久精品卫校国产小美女| 国内精品久久久久影院薰衣草| 久久精品日日躁夜夜躁欧美| 午夜不卡久久精品无码免费| av国内精品久久久久影院| 久久国产成人午夜AV影院| 狠狠色噜噜色狠狠狠综合久久| 久久久久久久久久久久中文字幕| 亚洲综合精品香蕉久久网97| 亚洲精品综合久久| 久久精品国产亚洲AV电影| 久久国产美女免费观看精品 | 久久久这里有精品中文字幕| 超级碰碰碰碰97久久久久| avtt天堂网久久精品| 免费一级做a爰片久久毛片潮| 亚洲国产精品无码久久一线| 久久综合狠狠综合久久激情 | 精产国品久久一二三产区区别 | 国产成人久久精品激情| 久久久久国产一区二区| 97久久精品无码一区二区| 热久久最新网站获取| 精品国产福利久久久| 无码人妻久久一区二区三区蜜桃| 久久香蕉一级毛片| 久久久无码人妻精品无码| 亚洲国产精品无码久久久久久曰| 久久电影网2021| 国产A级毛片久久久精品毛片| 久久精品成人一区二区三区| 精品久久久久久国产91| 色综合久久久久综合体桃花网| 欧洲性大片xxxxx久久久| 久久久久国产精品| 国产精品99久久99久久久| 伊人久久大香线蕉av一区| 亚洲人成无码www久久久| 久久九色综合九色99伊人|