import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class J068 extends JFrame {
static String sAppTitle = "Java Application";
static J068 oAppFrame;
JPanel content;
JPanel wpnlCanvas001;
/**
* Launch the application.
*/
public static void main(String[] args) {
// 以前はイベントもメイン・スレッドでしたが、
// イベントはイベント・ディスパッチ・スレッドに分離されたために、
// GUIコンポーネントの設定もイベント・ディスパッチ・スレッドで設定しなければならなくなったので、
// メイン・スレッドでのGUIコンポーネントの設定はNGになりました、
// 下記のように「EventQueue.invokeLater()」でイベント・ディスパッチ・スレッドに登録しなければなりません。
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
oAppFrame = new J068();
oAppFrame.setVisible(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public J068() {
// 閉じるボタンをクリックされた場合の動作を設定
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(sAppTitle);
setLocation(50, 50);
// ContentPaneの実態はJFrameにビルトインされているデフォルト・パネル。
content = (JPanel) getContentPane();
content.setSize(350, 350);
// 「JFrame#setSize(~)」でフレーム・サイズを設定すると、
// タイトルも含むウインドウ全体のサイズになります。
// つまり、ウインドウ内の表示領域の縦がタイトルのサイズ分 少なくなります。
// 「JFrame#getContentPane().setPreferredSize(~)」で設定し、
// 「pack()」すれば、ContentPaneで設定された全表示領域が表示されます。
content.setPreferredSize(content.getSize());
pack();
// content.setLayout(null);
content.setLayout(new BorderLayout());
// wpnlCanvas001 = new JPanel();
wpnlCanvas001 = new PnlCanvas();
wpnlCanvas001.setBounds(10, 10, 350, 350);
getContentPane().add(wpnlCanvas001, BorderLayout.CENTER);
}
}
//Swing には JCanvas は存在しないので、
//グラフィックの描画には JPanel で代用する。
class PnlCanvas extends JPanel {
@Override
public void paint(Graphics g){
int width, height;
width = getSize().width;
height = getSize().height;
g.setColor(Color.GREEN);
int x,y,n,dx,dy;
n = 15;
dx = width/n-1;
dy = height/n-1;
for(int i = 0; i<n; i++) {
for(int j = 0; j<n; j++) {
x = i*width/n;
y = j*height/n;
g.fillRect(x, y, dx, dy);
}
}
}
}
|
|