忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 01:12 】 |
AWTとSwing
久しぶりにJavaを使った。
初めてAWTなるものとSwingなるものを使った。

AWT
Abstract Windowing Toolkit
JavaでGUIを実装するために使うクラスライブラリの総称。
Java標準で付属。
OSのウィンドウシステムに準じたデザイン

Swing
AWTの拡張。
Javaプログラム上で描画される。柔軟。軽量コンポーネントと呼ばれる
複雑なことをやるにはこっちが楽?
swingコンポーネントの一覧

さらにSWTというものもあるそうで。

http://www.sophia-it.com/content/AWT
http://ja.wikipedia.org/wiki/Swing
http://ja.wikipedia.org/wiki/Standard_Widget_Toolkit


まずはAWTのコード例

import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Sample extends Applet implements ActionListener {
TextField tf;
Button b;
public void init() {
tf = new TextField(60);
tf.setBounds(10, 50, 100, 20);
add(tf);

b = new Button("押せ!");
b.setBounds(130, 50, 40, 20);
b.addActionListener(this);
add(b);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
//押された
}
}
public void paint(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, 200, 150);
g.drawString("こんにちは世界", 10, 10);
}
};

main()は不要。
クラスはAppletを継承する。
init()で初期化。
paint(Graphics)で描画。
コンポーネントは生成していれば描画される。
ボタン押下などのイベントを実装したいときは、クラスがActionListenerをimplementする。コンポーネントにaddActionListenerを呼ぶと、デレゲート(で呼び方いいの?)のactionPerformedが呼ばれる。このあたりiOSと似てる。
なお、再描画命令はrepaint();。


次いでSwingのコード例

import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SampleClass extends JPanel implements ActionListener {
JTextField tf;
JButton b;
JFileChooser fc;

public static void main(String[] args){
//JFrameはウィンドウを作成するコンポーネント
JFrame frame = new JFrame();

//JFrameの下にJPanel(this)を付ける.
SampleClass app = new SampleClass();
frame.getContentPane().add(app);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 400);
frame.setTitle("Title of SampleClass");
frame.setVisible(true);

app.init();
}
public void init() {
tf = new TextField(60);
tf.setBounds(10, 50, 100, 20);
add(tf);

b = new Button("ファイル開く?");
b.setBounds(130, 50, 40, 20);
b.addActionListener(this);
add(b);

fc = new JFileChooser( "." ); //カレントディレクトリ

repaint();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
int result = fc.showOpenDialog( null );
if(result==JFileChooser.APPROVE_OPTION) {
System.out.println(fc.getSelectedFile().getPath());
}
}
}
public void paint(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, 200, 150);
g.drawString("こんにちは世界", 10, 10);
}
}

SwingでもAWTをいくらか必要とするそうだ。
クラスはJPanelを継承しているが、たぶんJComponentを継承する必要があるんだろう。
JFrameはウィンドウコンポーネント。
JPanelは中間的な表示領域。他のコンポーネントを配置する。
 JFrame.contentPane<- (add) <- JPanel <- (add) <- JButton, JTextField...
という構造になる。
main()が必要。ここでJFrameを作って、JPanel(ここではSampleClass)を追加。
で、クラス内の初期化を呼び出す(app.init())。そこでJPanelにコンポーネントを追加。
ちゃんとrepaint()しないと描画されないので注意。
ActionListenerはAWTと同様に使える。
クラス名にはJが付くみたい。
ファイルチューザは、Swingにしかないコンポーネントの例として。


クラスの階層構造はこんな感じ。

java.lang.Object
java.awt.Component
java.awt.Button
java.awt.TextComponent
java.awt.TextField
java.awt.Container
java.awt.Window ---------ここまでAWT
javax.swing.JComponent ---------ここからSwing
javax.swing.JPanel
javax.swing.AbstractButton
javax.swing.JButton
javax.swing.text.JTextComponent
javax.swing.JTextField
java.awt.Window
java.awt.Frame
javax.swing.JFrame -------ここもSwing


慶応大学の何かの授業のページ?
http://www.geocities.jp/h2fujimura/appendix/Component/index.html
Sunのページ
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html
PR
【2011/03/30 02:43 】 | Java | 有り難いご意見(0) | トラックバック()
<<Chromeのコード | ホーム | AWS>>
有り難いご意見
貴重なご意見の投稿














虎カムバック
トラックバックURL

<<前ページ | ホーム | 次ページ>>