web-dev-qa-db-ja.com

Java AWTなしのGUIリスナー

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

79
Hidde

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

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

コンポーネント

Swingは、JEditorPaneJTextPaneでスタイル付きドキュメントをサポートし、他のJComponentsでHTMLを使用して限られた範囲でサポートします。 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ツールキットであるということです。

Swingは両方のビルドに基づいており、andはAWTのクラスに大きく依存しています。

34
Andrew Thompson

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

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

7
MirroredFate

これは、javax.swing.Actionパッケージの使用を示すことができる小さな例です。Java doc for javax.swing。 eventパッケージ私はあなたがそれを見つけていると思います..。

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);
    }
}
2
Harshit Thacker

あなたが正しいです。 Java AWTとJava Springは廃止されました。代わりにJavaFXを使用してください。
[。 Javaリリースは以前のコードを壊し、新しいパッケージが古いものを置き換えます。

0
Baruch Atta