XPの絵板を模した通りを歩く(続き)


休みが終わると、学習速度が直線的に下がり、前に書いたバッグの日付が最近の9月中下旬に始まったXPの絵板をひっくり返す.各種の祝日に伴い、学校の重い学習とその他の任務に加えて、プログラムのプロセスは引きずっている.友达と话して、みんなが自分がプログラミングを学んでいないために心の中で罪悪感を生むことを発见して、このような罪悪感と罪悪感は最后に自分の怠惰な最良のインターフェースになって、プログラミングもあの言叶ではいけない伤になって、触れません.
     しかし、コードを叩くかどうかにかかわらず、半分のプログラムはそこに置いてあり、増減せず、少なくありません.だから私は最后にやはり引き続きこの大通りの上で歩かなければならないことを総括して、毎日1种の自己の感动を得ます~
     次はやはり私のプログラムについて話しましょう.
     JAVA入門は簡易なグラフィックボードで手に入れたので、XPを模した中で大体の考え方ができました.
  • フォームインタフェースの実装.
  • インタフェースの欄で、主にツールバー、色選択欄、図面パネルの3つのブロックの3つのプレートがあります.(ここではもちろん、その後のリスナーとも関係があります.)
  • メニュー選択欄の追加
  • 各プレート機能の実現、リスナーの使用.
  • 再描画、グラフィックの保存.

  •       個人的にはjavaコードを書くとき、各クラスの関係が一番頭が痛いと思います.一つのクラスを書くときに突然別の機能を持つクラスや方法を導入し、このように伝えられるうちに頭がくらくらしてしまいます.だから私も簡単に自分が書いたことを話しましょう.
  • は、ウィンドウを呼び出すメイン関数を作成します.
    //            
    	public static void main(String args[]){
    		DrawUI di = new DrawUI();
    		di.initUI();
    	}
     では、もちろんウィンドウ関数が必要です.ウィンドウの中でまず最も直感的なのは、彼の名前、ウィンドウのサイズ、およびウィンドウの内容の表示、表示位置、およびサイズが変更できるかどうかです.
    	public void initUI(){
    		this.setTitle("   v2.0");
    		this.setSize(new Dimension(700,600));
    		this.setDefaultCloseOperation(3);
    		this.setLocationRelativeTo(null);
                    }
     これらは非常に基礎的で簡単で、詳しく述べる部分はあまりありません.
  • 次にフォームを3つの大きなプレートに分割し、JPanelでブロックを完成させ、setJMenuBarに従ってメニューバーを作成します.3つのプレートのハイライトは、フレームレイアウトで3つをそれぞれ位置させることです.
                                     this.setJMenuBar(createMenuBar());
    		//           
    		BorderLayout bl = new BorderLayout();
    
    		//            
    		this.setLayout(bl);
    
    		//           
    		java.awt.Graphics g = this.getGraphics();
    
    		//          
    		ToolPanel tp = new ToolPanel();
    		this.add(tp,BorderLayout.WEST);
    		//            
    
    		ColorPanel cp = new ColorPanel();
    		this.add(cp,BorderLayout.SOUTH);
    		//           
    
    		DrawPanel dp = new DrawPanel();
    		this.add(dp,BorderLayout.CENTER);
    		this.setVisible(true);
     メニュー選択バーの方法
    //       
    	public JMenuBar createMenuBar(){
    		JMenuBar jmb = new JMenuBar();
    		//             
    		String[] arrayMenuFile = {"  ","  ","  ","  "};
    		//                  
    		String[][] arrayMenuItem = {{"  ","  ","  ","-","  "},
    				{"    "},{"    ","    "},{"  "}};
    		//                
    		for(int i = 0;i < arrayMenuFile.length;i++){
    			//      
    			JMenu menufile = new JMenu(arrayMenuFile[i]);
    			for(int j = 0;j < arrayMenuItem[i].length;j++){
    				if(!arrayMenuItem[i][j].equals("-")){
    					//         
    					JMenuItem jmt = new JMenu(arrayMenuItem[i][j]);
    					menufile.add(jmt);
    					ButtonListener bl = new ButtonListener(jmb);
    					jmb.addMouseListener(bl);
    				}else{
    					//        
    					menufile.addSeparator();
    				}
    			}
    			//          
    			jmb.add(menufile);
    		}
    		return jmb;
    	}
     今のコードはフレームワークに近いので、以前は両手でJPanelを空っぽに書いていたとき、もちろんツールバー、色選択バー、画板の3つのクラス、つまり上のコードがオブジェクトを実現するときに現れました.(遅くなって、書けなくなった.前の怠惰な積み重ねがこんなに多いのを責めて、明日続けて、安~)
  • 学校の仕事は一日中忙しくて、忙しくて暇を盗んで昨日の未完成の総括を続けました.
    まず、3つのパネルの表示と機能の実現であり、ここではマウスリスナーによってパネル内のボタンや他のイベントの操作を実現する.フォームのメソッドで呼び出されます.
  • これはツールバーで、グリッドレイアウトを利用して、この方法の利点は、その中のプレートを必要な個数に分割して、それから1層のforループで1回遍歴して、すでに作成したツールピクチャを伝達することです.私はここに16種類の画像を入れました.つまり16種類の絵の機能があります.その中でボタンの大きさを完全に画像の大きさに設定したので、頼りになるように見えますが、ツールバーのこれらの機能はリスナーのクラスで進展し、半分以上実現しました.
    public class ToolPanel extends JPanel {
    	
    	//         
    	private String item = "10  ";
    	//       
    	public String getItem(){
    		return item;
    	}
    	/**
    	 *      
    	 */
    	public ToolPanel(){
    		//           
    		ActionListener alr = new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				//  ActionLiatener   
    				item = e.getActionCommand();
    			}
    		};//          ,       
    		
    		//    panel  
    		JPanel panel = new JPanel();
    		panel.setLayout(new GridLayout(8,2));
    		panel.setPreferredSize(new Dimension(50,200));
    		String[] Arr = {"0   ","1  ","2  ","3  ","4  ",
    				"5   ","6  ","7  ","8  ","9  ","10  ","11  ",
    				"12    ","13     ","14   ","15      "};
    		//       ,         
    		for(int i = 0;i < Arr.length;i++){
    			ImageIcon icon = new ImageIcon("src/img/"+Arr[i]+".jpg"); 
    			JButton button = new JButton(icon);
    			button.setBorder(null);
    			button.setActionCommand(Arr[i]);
    			button.addActionListener(alr);
    			button.setSize(new Dimension(15,15));//       
    			panel.add(button);
    		}
    		
    		this.setLayout(new FlowLayout());
    		this.add(panel);
    	
    	}
    }
    
     

  •  私は色選択欄とツールバーボタンの画像入力の2つの方法を選択しました.ツールバーは直接入力しますが、色欄はもう1つのConfigのクラスを選んで、プログラムで使う定数を入れて、他のクラスで必要なときに直接呼び出します.このようなメリットは、後でプログラムを修正するときに操作しやすいことです.この部分はリスナーではまだ実現されていません.
    import javax.swing.ImageIcon;
    
    public class Config {
    	
    	//public static ImageIcon[] ICONS1 = new ImageIcon[16];
    	public static ImageIcon[] ICONS2 = new ImageIcon[32];
    	
    	static{
    			for(int j=16;j<32;j++) {
    		
    				javax.swing.ImageIcon image = new javax.swing.ImageIcon(				//
    				Config.class.getClassLoader().getResource("img/"+j+".jpg"));
    				image.setDescription(""+j);//                   
    				ICONS2[j] = image;//                    
    			}
    	}
    
    	
    }
  •  これはConfigのカラーバーの画像です.
  • public class ColorPanel extends JPanel{
    	/**
    	 *          
    	 */
    	public ColorPanel(){
    		//          
    		this.setLayout(new FlowLayout(FlowLayout.LEFT));
    		//    panel  
    		JPanel panel1 = new JPanel();
    		panel1.setLayout(null);
    		panel1.setPreferredSize(new Dimension(30,30));
    		//        
    		JButton btn1 = new JButton();
    		btn1.setBounds(5, 5, 16, 16);
    		JButton btn2 = new JButton();
    		btn2.setBounds(10, 10, 16,16 );
    		panel1.add(btn1);
    		panel1.add(btn2);
    		panel1.setBackground(Color.LIGHT_GRAY);
    		
    		JPanel panel2 = new JPanel();
    		panel2.setLayout(new GridLayout(2,8,3,3));
    		panel2.setPreferredSize(new Dimension(150,30));
    		panel2.setBackground(Color.LIGHT_GRAY);
    		
    		//       ,         
    		for(int j = 16;j < 32;j++){
    			ImageIcon image = Config.ICONS2[j];
    			//System.out.println("========>"+image.getDescription());
    			JButton button = new JButton(image);
    			button.setActionCommand(image.getDescription());//        
    			button.setSize(new Dimension(15,15));
    			button.setBorder(null);
    			panel2.add(button);
    			
    		}
    		
    		this.add(panel1);
    		this.add(panel2);
    	}
    	
    }

    ここには、色バーの左下隅にある2つの小さなブロックがあります.ここでは、色バー全体と色表示バーをそれぞれ2つのパネルに分けて置きます.
  • の下には、背景の初期色を白にするだけで簡単な絵板面が実現されています.しかし、コードには再描画方法が近く書かれており、当時はこのレベルに達していなかった.
    public class DrawPanel extends JPanel{
    	/**
    	 *    
    	 */
    	public DrawPanel(){
    		this.setBackground(Color.WHITE);
    	}
    	
    	
    	/**
    	 *      
    	 */
    	public void paint(Graphics g){
    		super.paint(g);
    		
    	}
    }
     まずここまで、リスナーの中のものがまだ追加されているので、今度書くとまたしばらく時間がかかると思います.表現能力が悪く、コードの書くレベルも限られていて、力が入らないので、自分が不足を知ってから主観的な消極を克服して、努力してほしいです.給油
  •