this wiki と対照的に、コーディングの観点からSwing GUIコントロールを実装する適切な方法を探しています。
私はJavaとそのGUIツールを学ぶために探求してきましたが、main
にすべてをスローするインターネットチュートリアルの後にインターネットチュートリアルを見つけましたが、これは正しくありません。
私もRAD Netbeansやその他の「ビジュアル」エディタなどのシステムを試しましたが、コーディングに着手するまでに、その半分がわからないコードのヒープがあります。そのため、コードスイングのハンドリングを学ぶことに専念しており、基本的なコントロールとレイアウトは知っていますが、正しい方法で実行したいと考えています。
不足しているモデルまたは標準はありますか?
質問例...
jFrameを拡張して独自のフレームオブジェクトを作成する方法(そうだと思います)
そのフレームオブジェクト内にメインメニューをカプセル化しますか?それとも独自に作成しますか?等...
「表示」ロジックを「アプリケーション」ロジックから分離するにはどうすればよいですか?
基本的に、GUIコードを整理する方法について、業界標準とは何かを探しています。
「ベストプラクティス」を構成するものについてはいくつかの議論があるようですので、私が見つけたものと私が最も効果的に機能することを説明します。
1.各ウィンドウは、JFrameまたはJDialog(ウィンドウのタイプに応じて)のいずれかを拡張する必要があります。これにより、毎回特定のオブジェクトを指定することなく、ウィンドウのプロパティを簡単に制御できます。ただし、私は両方の方法で行うことが知られているため、これはより一般的なケースです。
2. main()
メソッドは別のクラスにある必要があります。これにより、ウィンドウクラスが特定の実装に関連付けられていないため、他の場所でウィンドウクラスを使用できる可能性が高くなります。技術的には違いはありませんが、アプリケーションの起動コードはウィンドウに属していません。
3.リスナーは匿名の内部クラスにある必要があります。トップレベルのクラスはリスナーを実装しないでください。これにより、接続されているオブジェクト以外の場所からリスナーメソッドを呼び出すようなハッキングが防止されます。
以下は、これらのプラクティスを示す単一のフレームを使用した単純なアプリケーションです。
public class Main {
public static void main(String[] args) {
final String text = args[0];
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final MyWindow wnd = new MyWindow(text);
wnd.setVisible(true);
}
});
}
}
public class MyWindow extends JFrame {
public MyWindow(String text) {
super("My Window");
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
MyWindow.this.setVisible(false);
MyWindow.this.dispose();
}
});
final JButton btn = new JButton(text);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed", "Hey", JOptionPane.INFORMATION_MESSAGE);
}
});
setLayout(new FlowLayout());
add(btn);
pack();
}
}
ジョナサンのすべてのポイント に同意します。
各ウィンドウはJFrameまたはJDialogのいずれかを拡張する必要があります...
Main()メソッドは別のクラスにある必要があります...
リスナーは匿名の内部クラスにある必要があります...
以下も追加したいと思います。
GridBagLayout(GBL)は慎重に使用してください。 GBLは強力なレイアウトマネージャであり、習得は困難ですが、非常に強力です。
すべてのUIを手動でコーディングすることを検討してください。私は個人的に、ビジュアルエディターによって生成されるコードのファンではありません。しかし、それで私は数年(2000ish)の間ビジュアルエディターを使用していませんでした。彼らはこの時点でより良いかもしれません。
JPanelsは慎重に使用してください。 UIを見て、画面サイズの変更と同じように動作するコンポーネントを決定し、JPanelでそれらのコンポーネントをグループ化します。正しいサイズ変更動作を得るために、JPanels内でJPanelsを使用することを検討してください。
私のコンポーネントでイベントを処理する方法は、通常、ジョナサンの方法とは少し異なりますが、彼の方法は私の方法より少しクリーンだと思います。
また、MVCとレイヤードアーキテクチャの使用についても十分に検討してください。 UIとビジネスロジックを混在させないことが本当に最善です。