13

JavaSwingアプリケーションを拡大する方法を探しています。つまり、UIのスクリーンショットを撮り、「画像スケール」操作を適用したかのように、特定のJPanel内のすべてのコンポーネントのサイズを特定の係数で変更したいということです。フォントサイズだけでなく、チェックボックス、テキストボックス、カーソルなどのサイズも調整する必要があります。グラフィックスオブジェクトに変換を適用することにより、コンポーネントをスケーリングすることができます。

 protected Graphics getComponentGraphics(Graphics g) {
  Graphics2D g2d=(Graphics2D)g;

  g2d.scale(2, 2);

  return super.getComponentGraphics(g2d);
 }

これは、コンポーネントの自己更新を気にしない限り機能します。アプリケーションにテキストボックスがある場合、テキストボックスは毎秒更新されて(点滅する)カーソルが表示されるため、このアプローチは機能しなくなります。また、今回は変更されたグラフィックスオブジェクトを使用しないため、コンポーネントは古い場所に表示されます。コンポーネントのグラフィックオブジェクトを永続的に変更する可能性はありますか?マウスクリックイベントハンドラーにも問題があります。もう1つの可能性は、JPanelのすべての子コンポーネント(setPreferredSize)のサイズを新しいサイズに変更することです。チェックボックスの表示された画像はそのサイズを変更しないため、これはチェックボックスでは機能しません。自分のレイアウトマネージャーをプログラミングすることも考えましたが、レイアウトマネージャーはオブジェクトの位置(およびサイズ)を変更するだけで、チェックボックスを拡大することはできないため、これは機能すると思います(前の段落を参照)。それとも私はこの仮説に誤りがありますか?カスタムコンポーネントをプログラミングせずにズーム可能なSwingGUIを実現する方法について何かアイデアはありますか?問題はよく知られているように見えるので、回転可能なユーザーインターフェイスを探しましたが、この問題に対する満足のいく解決策も見つかりませんでした。

助けてくれてありがとう、クリス

4

4 に答える 4

9

JXLayer ライブラリを試すことができます。

その中には、ズームを作成するのに役立つツールがいくつかあります。ここに示す例を確認してください。このライブラリから、TransformUI について詳しく読むことをお勧めします。例から、問題の解決に役立つようです。

于 2010-05-31T15:29:52.113 に答える
7

ビューのスケーリングは簡単です。マウス座標の変換は少しだけ難しくなります。これが基本的な例です。幾何学について知っているJComponent類推を開発することは理にかなっているかもしれませんが、私はs を除外します。ScaledComponentそこで、ライブラリを使用するという @Gnoupi の提案が出てきます。

于 2010-05-31T16:52:07.007 に答える
2

他の画像ビューアと同じように画像をズームしたい場合は、これを試してみてください JPanel を使用して drawImage() メソッドを使用して画像を描画します ボタンを作成し、ボタンをクリックすると表示されるフレームのパネルのサイズを大きくします画像が Zoom で表示されているかのように

于 2011-11-15T12:52:25.873 に答える
2

Piccolo2D.java API が役に立つかもしれません: http://code.google.com/p/piccolo2d/

とてもシンプルです。

特にスムーズなズームが売りです。基本的に、さまざまな要素を含めることができる「キャンバス」を作成し、右クリックを押したままマウスを前後にパンするだけでズームできます。

私はこれを作成するためにそれを使用したチームで働きました: http://sourceforge.net/apps/mediawiki/guitar/index.php?title=WebGuitar#EFG.2FGUI_Visualizer

そこに表示されるノードは、クリック可能なリンク自体です。

于 2012-09-26T23:03:16.263 に答える