コンポーネントの基本的な操作
前回、JFrameを使ってウインドウを表示し、コンポーネントを組み込むまでを行いました。今回は、コンポーネントの利用についてもう少し掘り下げていきましょう。といっても、実をいえばコンポーネントの基本的な使い方は、AWTの場合とそれほど違いはありません。実際に何度かソースコードを書いてみればすぐに飲み込める程度のものです。
まずは、基本的なコンポーネントの組み込みからです。といっても、既に組み込みそのモノについては前回やっていますから、今回はレイアウトマネージャを変更して組み込んでみましょう。
package jp.allabout.java;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SampleApp extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel label;
private JTextField field;
private JButton button;
public SampleApp(){
this.setSize(new Dimension(300,200));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
label = new JLabel("This is Sample.");
label.setBounds(new Rectangle(20,20,200,20));
label.setFont(new Font("Serif",Font.BOLD,24));
this.add(label);
field = new JTextField();
field.setBounds(new Rectangle(20,60,250,20));
this.add(field);
button = new JButton("click");
button.setBounds(new Rectangle(100,100,100,25));
this.add(button);
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
label.setText(field.getText());
}
});
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
}
レイアウトマネージャをOFFにして、自由にレイアウトしたところ。 |
これは、レイアウトマネージャをnullにして、それぞれのコンポーネントの位置と大きさを指定して組み込んだものです。ここでは、this.setLayout(null); としてレイアウトマネージャをOFFにしています。このように、JFrameのsetLayoutを変更することで、使用するレイアウトマネージャを変えることができます。
これは、AWTとまったく同じですが、内部的には大きく違っています。this.setLayoutを呼び出すと、JFrameは、JFrame自身ではなく、そのコンテントペインのレイアウトマネージャを変更するのです。見かけはAWTと同じですが、Swingでは常に「コンテントペインに対し組み込みを行っている」ということを忘れないようにしましょう。
また、ここではJButtonをクリックした際の処理を組み込んでいますね。JButtonをクリックしたときのイベント処理は、AWTのButtonと同様 java.awt.eventパッケージの「ActionListener」を使って行います。あらかじめactionPerformedメソッドを実装してイベント処理を用意しておき、JButtonのaddActionListenerを使ってインスタンスを組み込みます。このあたりも、AWTとまったく同じですから悩むことはないでしょう。