【Swing】JFrameクラスについて


(JFrameのクラス階層)

java.lang.Object
→java.awt.Component
→→java.awt.Container
→→→java.awt.Window
→→→→java.awt.Frame
→→→→→javax.swing.JFrame

(JFrameクラスのコンストラクタ)

JFrame()
//初期状態が不可視な新しいフレームを構築する
JFrame(GraphicsConfiguration gc)
//画面デバイスで指定されたGraphicsConfigurationと空のタイトルでFrameを作成
JFrame(String title)
//指定されたタイトルを使用して、初期状態で不可視な新しいFrameを作成
JFrame(String title, GraphicsConfiguration gc)
//指定されたタイトルと画面デバイスの指定されたGraphicsConfigurationで、JFrameを作成します。

→主に使うのは一番目と三番目のコンストラクタ
→使用例

import javax.swing.JFrame;

class Sample{
  public static void main(String args[]){
    JFrame frame = new JFrame("MyTitle");
  }
}

(メソッド)

public void setVisible(boolean b)
//引数がtrueならフレームを表示
public void setTitle(String title)
//引数にタイトルをセット
public void setSize(int width, int height)
//引数でフレームの広さ、高さを定義
public void setLocation(int x, int y)
//引数でフレームの位置を定義
public void setLocationRelativeTo(null);
//引数nullでフレームの位置が中央
public void setBounds(int x, int y, int width, int height)
//引数でフレームの位置と広さ高さを定義
public void setDefaultCloseOperation(int operation)
//引数にJFrame.EXIT_ON_CLOSEで×ボタンでフレームを終了

(JFrameクラスを継承したサブクラス)

→フレームに対して独自のメソッドなどを追加したい場合はJFrameクラスを継承したサブクラスを定義する
→フレームのサイズや位置などの初期化処理はサブクラスのコンストラクタ内で行う

import javax.swing.JFrame;

//JFrameを継承
class JSample5_1 extends JFrame{
  public static void main(String args[]){
    JSample5_1 frame = new JSample5_1("MyTitle");
    frame.setVisible(true);
  }

//コンストラクタ
  JSample5_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

(ペインの取得とコンポーネント)

→コンポーネントを追加するには
→フレームからペイン(pane)を取得しペインにコンポーネントを追加する
→ペイン(pane)とはそれぞれ異なる目的のためにフレームに定義されているもの

(ContentPane)

→ContentPaneを取得するためにはJFrameクラスのgetContentPaneメソッドを使う

import javax.swing.JFrame;
import java.awt.Container;

class Sample extends JFrame{
  public static void main(String args[]){
  }

  Sample(String title){
    Container contentPane = getContentPane();//ContentPaneの取得
  }
}

→ContentPaneに対してのコンポーネントの追加
→Containerクラスで定義されているaddメソッドを使う

public void add(Component comp, Object constraints)
//一番目の引数はコンポーネントのオブジェクト
//二番目の引数は追加する位置

→レイアウトマネージャー:コンポーネントをどうするか
→レイアウトマネージャーは複数種類ある

//東西南北中の位置を指定するレイアウトマネージャー
BorderLayout.NORTH
BorderLayout.SOUTH
BorderLayout.EAST
BorderLayout.WEST
BorderLayout.CENTER

(ボタン追加)

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.BorderLayout;

class Sample extends JFrame{
    public static void main(String[] args){
    JFrame frame = new JFrame();
        JButton btn = new JButton("aaaa");

    Container contentPane = frame.getContentPane();
    contentPane.add(btn, BorderLayout.NORTH);

    frame.setBounds(100, 100, 600, 400);
    frame.setTitle("MyTitle");
        frame.setVisible(true);
    }

}

(出力結果)

(ContentPaneの取得の省略)

→新しい環境なら自動でContentPaneを取得してくれるため省略可能

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.BorderLayout;

class Sample extends JFrame{
    public static void main(String[] args){
    JFrame frame = new JFrame();
        JButton btn = new JButton("aaaa");

    frame.add(btn, BorderLayout.NORTH);

    frame.setBounds(100, 100, 600, 400);
    frame.setTitle("MyTitle");
        frame.setVisible(true);
    }

}

(出力結果)

(レイアウトマネージャーの設定)

→フレームでレイアウトマネージャーを設定するにはContentPaneを取得しペインに対して設定する

public void setLayout(LayoutManager mgr)
//レイアウトマネージャーを設定する
//使用例
import javax.swing.JFrame;
import java.awt.FlowLayout;

class Sample extends JFrame{
  public static void main(String args[]){
  }

  Sample(String title){
    Container contentPane = getContentPane();
    contentPane.setLayout(new FlowLayout());
  }
}

※現在はContentPaneを取得しなくてもJFrameクラスのsetLayoutメソッドで自動的にContentPaneに設定される

public void setLayout(LayoutManager manager)
//レイアウトマネージャーを設定する
//使用例
import javax.swing.JFrame;
import java.awt.FlowLayout;

class Sample extends JFrame{
  public static void main(String args[]){
  }

  Sample(String title){
    setLayout(new FlowLayout());
  }
}
(背景色)
public void setBackground(Color bg)
//引数はColorクラスのものを使う
//例:「Color.GREEN」
(アイコン画像)
public void setIconImage(Image image)
//Imaginationクラスをインスタンス化し、画像のパスを引数に渡す