絵を描くframeの準備

絵を描くフレームを表示する

絵を描くキャンバス用のフレームを準備します。プログラムは6つのクラスファイルを用意しました。
将来的に機能を色々付け足したいので、最初からみたこともないようなプログラム文が出てくると思います。
クラスファイルを一式紹介します。
最初はmain()です。中身は前に紹介したものと同じですが、無駄なものを省きました。フレームの大きさも固定した大きさにしています。


import java.awt.Dimension;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalLookAndFeel;

public class MainCubeTest_01 {

	  /**
	   * メイン処理。
	   **/
	
	  public static void main(String[] args){
	    // スクリーンサイズを設定する
		// Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension ScreenSize =new Dimension(600,600);
		  
	    // フレームの作成
	    GFrame gframe= new GFrame (ScreenSize);
	    try {
	      UIManager.setLookAndFeel(new MetalLookAndFeel());
	      SwingUtilities.updateComponentTreeUI(gframe);
	    }catch(Exception e){
	      System.out.println(e);
	      System.exit(1);
	    }
	  }
}

次は、GFrame()です。フレーム枠を作ります。


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class GFrame extends JFrame{

		  private MaPane MPane = null;
		  private GCanvas GCan = null;
		  private int DispWidth;
		  private int DispHeight;
		  private JPanel jPanel1 = new JPanel();
		  private BorderLayout borderLayout1 = new BorderLayout();
		  private JScrollPane jScrollPane1 = new JScrollPane();

		  /**
		   * メインフレームを作成する。
		   */
		  
		  public GFrame(Dimension Size){
		    this.DispWidth = Size.width;
		    this.DispHeight = Size.height;
		    // フレームの作成
		    initial();
		  }

		  /**
		   * フレームのイニシャル
		   */
		  void initial(){
		    // キャンバスの作成
		    GCan = new GCanvas();
		    MPane = new MaPane(GCan);	//add
		    // フレームの初期化
		    jInit();
		    jScrollPane1.setViewportView(MPane);
		    Viewp.setViewport(jScrollPane1.getViewport());
		    setSize(DispWidth, DispHeight);
		    setVisible(true);
		    MPane.setLayerSize();
		    // 再描画
		    GCan.repaint();
		  }

		  /**
		   * イベント初期化処理。
		   */
		  private void jInit() {
		    this.addWindowListener(new java.awt.event.WindowAdapter() {
		      public void windowClosing(WindowEvent e) {
		        this_windowClosing(e);
		      }
		    });
		    this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		    this.setTitle("ここはタイトル(^o^) ^o^ ^o^");
		    jPanel1.setLayout(borderLayout1);
		    this.getContentPane().add(jPanel1,  BorderLayout.CENTER);
		    jPanel1.add(jScrollPane1, BorderLayout.CENTER);

		  }

		  /**
		   * クローズボタンアクションリスナ
		   */
		  private void this_windowClosing(WindowEvent e) {
		    // 確認ダイアログの表示
		    if(JOptionPane.showConfirmDialog(this, "アプリケーションを終了します",
		                                     this.getTitle(),
		                                     JOptionPane.OK_CANCEL_OPTION)
		                                     != JOptionPane.YES_OPTION) { // OK
		      return;
		    }
		    System.exit(0);
		  }
}

次はViewp()です。数行のプログラムのためにどうしてわざわざクラスファイルを作っているのか分からない。みたいな感じですが、将来拡大縮小とかを継ぎ足していこうと思っているのです。


import javax.swing.JViewport;

public class Viewp {
	  private static JViewport viewPort;// ビューポート
	  private static Viewp Viewp = new Viewp();
	  private Viewp(){
	  }

	  static void setViewport(JViewport v){      //ビューポートの設定
	    viewPort = v;
	  }
}

MaPane()は、レイヤを追加するイメージで用意した。GCanvasというキャンバスに使うレイヤを追加した。さらに追加もできる。


import java.awt.Dimension;
import javax.swing.JLayeredPane;

public class MaPane extends JLayeredPane {

	private GCanvas GCan;

	/**
	* キャンバスを作成する。
	*/
	MaPane(GCanvas GCan){
		this.GCan = GCan;
	    this.add(GCan, new Integer(0));
	}
	  /**
	   * レイヤサイズを再設定
	   */
	  void setLayerSize(){
		  this.setPreferredSize(new Dimension(560,550));
		  GCan.setBounds(0,0,600,600);
	  }
}

次に、GCanvas()です。一番下のリペイント処理で絵を描きます。


import java.awt.Graphics;
import javax.swing.JPanel;

public class GCanvas extends JPanel {

	  private DrawGraphi DG1 ;

	public GCanvas() {
	    initial();	
	}

	private void initial(){
		DG1 = new DrawGraphi();
	}

	  /**
	   * 再描画。
	   */
	public void paintComponent(Graphics g){
	    super.paintComponent(g);
	    DG1.Draw(g);
	}
}

最後にDrawGraphi()で実際に絵を描く処理をしています。背景を塗りつぶしてから、ここでは例として、線や円を描いています。


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

public class DrawGraphi {
	  DrawGraphi(){
	    initial();
	  }

	  void initial(){

	  }

	  public void Draw(Graphics g){
	    Graphics2D g2 = (Graphics2D)g;
	    final Color dc =new Color(255,0,255);	//pink
		final Color backColor = new Color(0,0,80);//dark blue
	    g2.setBackground(backColor);
	    g2.clearRect(0,0,600,600);
	    g2.setColor(dc);
	    g2.drawOval(50,50,450,450);
	    g2.drawString("●",100,100);
	    g2.drawLine(0,0,500,500);    
	  }
}



hello

 実行すると右図のようになります。線の色は本当はピンクです。