AWTのないJavaGUIリスナー


82

私はJava開発者であり、インターネットチュートリアルから学んでいます。フルスクリーンのGUIアプリケーションを学んでいます。昨日、AWTは古くなっているので、プログラムで使用すべきではないと言われました。軽量コンポーネントと重量コンポーネントについてはすでに知っていますが、主な問題はマウスとキーボードのリスナーです。なぜAWTは時代遅れなのですか?AWTなしでプログラムを作成する方法(JComponentsにリスナーを追加するなど)(どのような種類のSwingがAWTを置き換えることができますか)?


AWT以外のリスナーのことは聞いたことがありません。それを自分で知っておくといいでしょう。
LouwHopley 2011

3
@Nideo:javax.swing.eventパッケージ内の20以上のリスナーで「耳」をごちそう。;)
Andrew Thompson

@アンドリュー、ありがとう!:P AWTリスナーよりもスイングリスナーを使用する理由はありますか?
LouwHopley 2011

回答:


43

あなたはあなたに与えられた情報を誤って解釈しています。AWTコンポーネントでSwingコンポーネントを使用することは避けてください。SwingをAWTリスナー構造、レイアウトマネージャーなどで使用することは問題ありません。実際、使用しないことは不可能です。


36

良い答えがいくつかありますが、少し違う面を取り上げたいと思います。SwingがAWTを超えて提供するもの。

コンポーネント

スイング支持体はで文書をスタイルJEditorPaneJTextPane&他のいくつかの中にHTMLを使用して限られた範囲でJComponents。AWTは、どのコンポーネントでもスタイル付きドキュメントをサポートしていません。

AWTはJTree、のようなツリーベースの構造、のような表形式の構造JTable、のバージョンを提供しませんJToolBar

AWTにはJColorChooser、単純なユーティリティクラスに相当するもの(私が見つけたり思い出したりできるもの)はありませんJOptionPane

リスナー

コメントで述べたように、javax.swing.eventパッケージ内の20以上の追加/代替リスナーを参照してください。

プラグ可能なルックアンドフィール

Swingコンポーネントは、ネイティブPLAFを含め、実行時に特定のルックアンドフィールに設定できます。

その他のサンプルについては、ネストされたレイアウトの例のスクリーンショットを参照してください。

レイアウト

多数のAWTレイアウトに加えて、Swingは以下を提供します。

  1. BoxLayout
  2. GroupLayout
  3. OverlayLayout
  4. ScrollPaneLayout
  5. SpringLayout
  6. ViewportLayout

その他


その簡単な説明で私が見逃したことはおそらくもっとたくさんありますが、肝心なのは、Swingはまったく新しくてより有効なGUIツールキットであるということです。

スイングは上に構築、両方AWTのクラス、に大きく依存しています。


7

JavaのSwingは、AWTパッケージの一部であるActionListenersを取ります。スイングを使用する場合は、何らかの形式のAWTActionListenerを使用する必要があります。それがまさにその通りです。複雑なGUIにJavaを使用することはまったくお勧めしませんが、直接の代替手段がないため、AWTが古くなっているとも言えません。したがって、先に進んでAWTを使用してください。

別の方法として、JOGLを調べることもできますが、ゲーム指向の何かを作成しようとしている場合はそれだけではありません。


2

これは、javax.swing.Actionパッケージの使用を示すことができる小さな例です。javax.swing.eventパッケージのjavadocも参照する必要があります。。。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;

class SysOutHelloAction extends AbstractAction {
    private static final Icon printIcon = new ImageIcon("Print.gif");

    SysOutHelloAction() {
        super("Print", printIcon);
        putValue(Action.SHORT_DESCRIPTION, "Hello, World");
    }

    public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("Hello, World");
    }
}

public class SwingActionTester {
    public static void main(String args[]) {
        JFrame frame = new JFrame("Action Sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final Action printAction = new SysOutHelloAction();
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("File");
        menuBar.add(menu);
        menu.add(new JMenuItem(printAction));
        JToolBar toolbar = new JToolBar();
        toolbar.add(new JButton(printAction));
        JButton enableButton = new JButton("Enable");
        ActionListener enableActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.setEnabled(true);
            }
        };
        enableButton.addActionListener(enableActionListener);
        JButton disableButton = new JButton("Disable");
        ActionListener disableActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.setEnabled(false);
            }
        };
        disableButton.addActionListener(disableActionListener);
        JButton relabelButton = new JButton("Relabel");
        ActionListener relabelActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.putValue(Action.NAME, "Changed Action Value");
            }
        };
        relabelButton.addActionListener(relabelActionListener);
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(enableButton);
        buttonPanel.add(disableButton);
        buttonPanel.add(relabelButton);
        frame.setJMenuBar(menuBar);
        frame.add(toolbar, BorderLayout.SOUTH);
        frame.add(buttonPanel, BorderLayout.NORTH);
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

1

あなたが正しいです。JavaAWTとJavaSpringはどちらも廃止されました。代わりにJavaFXを使用してください。
そして、解説として、私はJavaに不満を感じています。これは、「どこでも一度実行すると書き込む」はずだったのですが、新しいJavaリリースでは以前のコードが壊れているため、「3か月ごとにアプリを書き直さなければならない」ことが判明しました。新しいパッケージが古いパッケージに取って代わります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.