問題タブ [gui-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 別のネストされたウィンドウからネストされたウィンドウにアクセスするための最良の方法
GUIアプリケーションには次のウィンドウ階層があります。
親ウィンドウは子の上にあります。
各子ウィンドウは、親wndクラスの保護されたメンバーです。
各子ウィンドウクラスには、その親ウィンドウへの参照/ポインタがあります。
ペインはカスタムコントロールのプレースホルダー(ビュー)です。
すべてのコントロールは標準のMFCコントロールです。
一部CCtrl1
のイベントハンドラーを変更する必要がありますCCtrl2
(たとえば、テキストを設定するため)。これを達成するための最良の方法は何ですか?ウィンドウ階層の別のブランチにネストされた別のウィンドウから、ウィンドウ階層のあるブランチにネストされたウィンドウにアクセスするための最良の方法は何ですか?
ここに2つの解決策を投稿します。
解決策1
- すべての子ダイアログ(コントロールコンテナ)には次のものがあります。
- 親ダイアログを返すパブリックゲッターと
- 子コントロールに対して何らかのアクションを実行するパブリックメソッド(子コントロールは非表示になります)
- 親ダイアログを返すパブリックゲッターと
- ルートウィンドウには、ペインを返すパブリックゲッターがあります
MainWnd.h:
LeftPane.h:
RightPane.h:
LDlg1.h:
LDlg1.cpp:
RDlg2.h:
ここにあるケースは、この質問で説明したケースと似ています。パブリックゲッターのチェーン(GetMainWnd().GetRightPane().GetRDlg2()...
)を使用して、目的のネストされたオブジェクトにアクセスします。CLDlg1は、デメテルの法則に違反するCRightPaneとCRDlg2について知っています。
SetCtrl2Text(...)
この状況は、メソッドを階層の上位レベルに移動することで回避できます。これについては、次のように説明します。
解決策2
この場合CMainWnd
、深くネストされたコントロールでアクションを実行するために必要なすべてのメソッドが含まれています。
MainWnd.h:
MainWnd.cpp:
RightPane.h:
RightPane.cpp:
LDlg1.cpp:
RDlg2.h:
RDlg2.cpp:
これにより、ウィンドウ階層がクライアントから隠されますが、このアプローチは次のとおりです。
CMainWnd
ネストされたすべてのコントロールに対してすべてのアクションを実行するパブリックメソッドでクラスを過密にします。CMainWnd
すべてのクライアントのアクションのメインスイッチボードのように機能します。- CMainWndとネストされた各ダイアログでは、これらのメソッドがパブリックインターフェイスで繰り返されます
どちらのアプローチが望ましいでしょうか?または、この問題に対する他の解決策/パターンはありますか?
解決策3
さらに別の解決策は、特定のイベントソースオブジェクトのイベントハンドラーを含むインターフェイスクラスを使用することです。宛先オブジェクトのクラスはこのインターフェースを実装し、イベントのソースとハンドラーは緩く結合されています。これは多分行く方法ですか?これはGUIの一般的な方法ですか?
編集:
解決策4-パブリッシャー/サブスクライバーパターン
以前のソリューションでは、イベントソースオブジェクトはイベントハンドラーへの参照を保持しますが、複数のイベントリスナーがある場合に問題が発生します(2つ以上のクラスをイベントで更新する必要があります)。パブリッシャー/サブスクライバー(オブザーバー)パターンはこれを解決します。このパターンについて少し調べて、ソースからハンドラーにイベントデータを渡す方法の2つのバージョンを考え出しました。ここのコードは2番目のものに基づいています:
Observer.h
Notifier.h
EventTextChanged.h
LDlg1.h:
LDlg1.cpp:
RDlg2.h:
RDlg2.cpp:
LeftPane.h:
RightPane.h:
MainWnd.h:
MainWnd.cpp:
このソリューションは、イベントソース(CLDlg1
)とハンドラー()を分離CRDlg2
します-彼らはお互いを知りません。
上記のソリューションとGUIのイベント駆動型の性質を考慮すると、私の元の質問は別の形式に進化しています。ネストされたウィンドウから別のウィンドウにイベントを送信するにはどうすればよいですか。
c# - クリックしてパネルを展開し、非表示のコントロールを表示する
現在、C# wpf プロジェクトに取り組んでいます。私が探していたのは、他の GUI コントロールを内部に持つことができるが非表示の GUI コントロールであり、ユーザーが GUI コントロールをクリックするとパネルが展開され、非表示の GUI コンポーネントが表示されます。他のプログラムを見たことがありますが、C# でそのようなものを見つけることができません。
ご協力いただきありがとうございます。
asp.net-mvc - モダンマスターディテールパターン
Asp.net MVC 完全 ajax を使用して、顧客のイントラネットでホストされる新しい金融 Web アプリケーションを作成します。会社のセットアップ画面があり、会社のモデルが以下に示されています。
マスター/詳細、マスター/詳細、マスター/詳細を 1 つのページで作成し、別のアイデアとして、会社のマスター/詳細を作成してから、地域、地区、支店のタブを作成し、各タブを前のタブに依存させることを考えました。私は両方のアイデアが好きではありません。ユーザーがページ レイアウトを理解するのは非常に難しく、加えて非常に古いスタイルです。
問題は、すべてのアプリケーション ページがこのパターンに従っていることです。この例のようにネストされたモデルに適合するページ レイアウトのスマートなアイデアが必要です。IPad またはモバイル アプリのデザインに触発されている場合は、それを好みます。
ありがとう
web - GUI 設計用語
Web アプリケーションで使用されるテーマ ボタンを説明するためのグラフィック デザイン用語を探しています。私が理解している方法は、特定の色/背景が作成され、さまざまなサイズと形状のボタンが背景を使用して表示されるということです。
私はそれらを見たことがありますが、それらがどのように使用されているか、またはそれについてどのように話しているのか正確にはわかりません.
qt4 - QT を他のライブラリに簡単に置き換えることができる UI を設計する方法
UIのデザインを始めようとしています。UI は複雑であることが予想され、いくつかの画面があり、そのうちの 1 つがテキスト エディターです。アプリケーションは C++ で作成されており、既存の機能を活用するために、UI に Qt を使用することにしました。ただし、後でQtを他のUIライブラリに簡単に置き換えたり、プラットフォームごとに異なるライブラリを使用したりできるように、UIを記述できるようにしたいと考えています。
私は自分のクラスに QT オブジェクトを含め、全体で自分のクラスを使用することに傾いています。これは良いデザインですか?サブクラス化は非常に厳格なバインディングのように見えるため、サブクラス化(Qtで推奨されている)とは対照的に、これを好みました。ただし、これは、Qt が公開するすべてのメソッドのラッパーを作成する必要があり、QtCreator も使用できないことを意味します。
どう思いますか?方法の選択の利点/欠点を説明していただけますか。例や優れた設計原則を教えていただければ幸いです。
java - Layout Manager の推奨事項
アーケードゲームのGUIを作成しています。図に示すように、いくつかの JPanels と 1 つの JMenu を含む単一の JFrame で構成されます。
BorderLayout を使用してみましたが、パネルが正しく表示されません。私が得るのは、JMenu が適切に表示されることです。[1] は、その幅を内部のボタンの内容に合わせて調整します。JPanel [2] は、画面のほぼ残りの部分を占めています。[3] は最後に細い線として表示されます。
それらを適切な位置に配置するために使用するコードの断片を次に示します。
この動作を引き起こしている可能性のあるものについての提案は大歓迎です。
usability - リアルタイム グラフのちらつきを減らすには?
X 軸が時間を表し、Y 軸がアルファベット順に並べられた一連の名前を表す散布図を 5 秒ごとにレンダリングしています。
一連のデータ ポイント (「X」など) は、オプションでカテゴリにグループ化できるため、これを示すために色を使用します。したがって、同じ色のすべての「X」は同じカテゴリに属します。
問題: 何万もの名前があり、ある時点でグラフにランダムに表示されることがあります。本当の目的は、これらの名前を監視する機能を提供するグラフをユーザーに提供することです。したがって、グラフをレンダリングするたびに、レンダリングするポイントのリストと基礎となるグラフ ライブラリを取得します。Flotr2は、ポイントのセットに色を割り当てる処理を行います。したがって、データセットに 2 つのカテゴリのポイントが含まれている場合は 2 つの色が割り当てられ、新しいカテゴリに属するポイントが到着した場合は 3 つ目の色が割り当てられます。この結果、これが原因で私が観察しているのは、ちらつき効果です。
そして点が消えると、色は元の色に戻ります。この問題を解決する良い方法はありますか? 2 つの特定の問題があります。
- 新しいポイントが追加されるたびに色が変化し続ける
- どこかに追加された新しいポイントは、他のすべてのポイントをいずれかの方向に垂直にシフトします。たとえば、カテゴリ 2.5 が追加された場合、アルファベット順を維持する必要があるため、カテゴリ 2 が下に移動し、カテゴリ 1 が上に移動します。
非常に動的なシナリオでは、このようなグラフは視覚的に示すダイナミズムのために役に立たない傾向があります。私が考えることができる明白な解決策の 1 つは、グラフ内のすべてのポイントと可能なすべてのカテゴリにスペースを事前に割り当てることです。これにより、新しいポイントの出現によって何も変化せず、どこかにポイントが描画されるだけになります。ただし、このアプローチが名前とカテゴリのセットが頻繁に変更される大規模なデータ セットに適しているかどうかはわかりません。
この問題を解決する良い方法はありますか? この問題を軽減する他のグラフの種類を受け入れます。要するに、新しい名前の出現を時間軸で表示できるリアルタイム表示が欲しい。
animation - Microsoft office 2013 アニメーションのイージング機能
アニメーションを利用することで、ほぼすべてのプラットフォームの GUI を簡単かつ簡単に設計できるようになりました。しかし、イージング機能の選択はユーザー エクスペリエンスに劇的な影響を与えます。MS Office 2013 (そしておそらく Windows 8 全般) で使用されているイージング機能は本当にクールだと思います! 誰がそれが何であるか知っていますか?
java - Java から .exe を実行する他の方法はありますか?
主な問題は、Java を使用して C++ ロジックを実行できないことです。サブプロセスを正しく作成していますか?
皆さん、ありがとうございました; - - アップデート!---
したがって、最も純粋な方法で .exe を開く機能をテストするためにこれらを作成しました。Eclipse はファイルを認識できますが、ファイルが存在しないことに文句を言いません。Eclipse の実行ボタンを使用して実行しました。
Java ファイル:
C++ ファイル:
出力:
ヌル