15

私は人々がSwingとAWTを混ぜないことを勧めていることに気づきましたComponents、しかし私達はこれをたくさん見ます:

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
 //AWT imports though only for listeners
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

それで、なぜJavaを含む多くの人が(ここで彼らのチュートリアルからそれを得たので)まだAWTインポートを使用しているListenerのですか?

、、プレス/セレクションなどのネイティブSwing Listeners / Librariesをどのように追加しますか?KeyButtonJComboBox

それとも私は使用しfirePropertyChangeListeners()ますか?(これはJava Beansに関連していますが)

しばらくの間私を混乱させてきました、私のアプリのほとんどは悪いと言われているSwingとAWTを持っていますか?

4

3 に答える 3

11

SwingはAWTの上に構築されており、UIコンポーネントを作成および描画するための異なる哲学を備えています。2つのフレームワークのUIコンポーネントを混在させると、予期しない結果が生じる可能性があるため、推奨されませんでした(kleopatraが述べているように、これは修正されています)。ただし、Swingは、リスナーを含むAWTイベントキューパラダイムを引き続き使用します。理由がないため、Swingにネイティブなリスナーに置き換えられません。

アプリケーションにSwingとAWTの両方を使用するのが一般的な方法ですが、警告されたのはSwingとAWTの両方のUIコンポーネントを使用することです。

于 2012-08-20T15:10:55.193 に答える
10

SwingはAWTとかなりの数のクラスを共有し、同じ実装のいくつかを使用します-javax.swing.JComponent(基本のSwingコンポーネントクラス)は実際にはjava.awt.Component(基本のAWTコンテナクラス)から継承することに注意してください

注意すれば、SwingとAWTを混在させることは実際にはそれほど問題ではありません。主な落とし穴は次のとおりです。

  • AWTコンポーネントとSwingUIコンポーネントを組み合わせると、ルックアンドフィールが大きく異なるリスクがあります。
  • Swingコンポーネントは「軽量」(Javaによってレンダリング)ですが、AWTコンポーネントは「重量級」(ホストプラットフォームにコンポーネントとして実装されています)です。つまり、AWTコンポーネントをSwingコンポーネント内に配置すると問題が発生します(逆の場合は問題ありません)。
于 2012-08-20T15:15:58.557 に答える
1

たぶん誰かがこれを将来見て、それでもそれが役に立つと思うでしょう。AWTコンポーネントのリストとそれらのSwingの代替品は何ですか。

于 2014-11-19T14:05:20.840 に答える