web-dev-qa-db-ja.com

setBoundsとは何ですか、どのように使用しますか?

SetBounds、その目的、またはその機能が実際には何も見つかりません。誰かがこれについて私を片付けることができますか?本当にありがとう!

26
JeremyF

layoutnullに設定すると、setBounds(x, y, width, height)を使用してGUIコンポーネントの位置とサイズを指定できます。 (x, y)は、そのコンポーネントの左上隅の座標です。

28
tianz

setBoundsは、コンポーネントの境界矩形を定義するために使用されます。これには、位置とサイズが含まれます。

は、フレームワーク内の多くの場所で使用されます。

  • レイアウトマネージャーは、親コンテナー内のコンポーネントの位置とサイズを定義するために使用します。
  • Paintサブシステムで使用され、コンポーネントをペイントするときにクリッピング境界を定義します。

ほとんどの場合、絶対に呼び出さないでください。代わりに、適切なレイアウトマネージャーを使用して、このメソッドに情報を提供する最適な方法を決定させる必要があります。

9
MadProgrammer

これは Java.awt.Component クラスのメソッドです。コンポーネントの位置とサイズを設定するために使用されます。

setBounds

public void setBounds(int x,
                  int y,
                  int width,
                  int height) 

このコンポーネントを移動およびサイズ変更します。左上隅の新しい場所はxとyで指定され、新しいサイズは幅と高さで指定されます。パラメーター:

  • x-このコンポーネントの新しいx座標
  • y-このコンポーネントの新しいy座標
  • width-このコンポーネントの新しい幅
  • height-このコンポーネントの新しい高さ

上記のxおよびyは、ほとんど(すべて?)の場合の左上隅に対応します。

setLocationおよびsetSizeのショートカットです。

これは通常、レイアウト/レイアウトマネージャーが存在しない場合、つまりnullの場合にのみ機能します。

8
Andrey Akhmetov

@hexafractionによる回答があります。彼はxとyを間違って右上隅に指定しました。

ソースも提供していますので、確認してください。

public void setBounds(int x,
             int y,
             int width,
             int height)

このコンポーネントを移動およびサイズ変更します。左上隅の新しい場所はxとyで指定され、新しいサイズは幅と高さで指定されます。このメソッドは、レイアウト関連の情報を変更するため、コンポーネントの階層を無効にします。

パラメータ:

x-このコンポーネントの新しいx座標

y-このコンポーネントの新しいy座標

width-このコンポーネントの新しい幅

height-このコンポーネントの新しい高さ

ソース: setBounds

2

実際、Swingコンポーネントには次のような複数のディメンションがあります。

  • 現在のサイズ-setSize()およびsetBounds()はこれを設定します
  • 最小サイズ-setMinimumSize()はこれを設定します
  • 推奨サイズ-setPerferredSize()はこれを設定します
  • 最大サイズ-setMaximumSize()はこれを設定します。

SetBoundsは、現在のサイズとウィジェットの位置を設定するためのショートカットですifレイアウトマネージャーを使用しません。

レイアウトマネージャーを使用する場合、設定した優先サイズを考慮してコンポーネントをレイアウトし、コンポーネントがminimumSizeより小さくなったり、maximumSizeより大きくならないようにすることは、レイアウトマネージャーの責任です。

この場合、layoutManagerはsetSize(またはsetBounds)を呼び出すため、コンポーネントの位置や寸法を実際に制御することはできません。

レイアウトマネージャーを使用する全体のポイントは、コンポーネントを自動的にレイアウトするプラットフォームとウィンドウサイズに依存しない方法を持つことです。コードからsetSizeを呼び出します。

(個人的なコメント:バグのあるレイアウトマネージャーがありますが、私は個人的にそれらすべてを嫌い、自分でロールバックしました。これにより、学習曲線なしでMigLayoutの柔軟性が提供されます。)

1
Gee Bee

ここにこの記事の短い段落があります フレームの作成方法(メインウィンドウ)-Javaチュートリアル-Oracle setBoundsメソッドが他の同様のメソッドに加えて行うことを説明しています:

Packメソッドは、すべてのコンテンツが推奨サイズ以上になるようにフレームのサイズを変更します。 packに代わる方法は、setSizeまたはsetBounds(フレームの場所も設定する)を呼び出してフレームサイズを明示的に確立することです。通常、packはフレームサイズをフレームレイアウトマネージャーに任せ、レイアウトマネージャーはプラットフォームの依存関係やコンポーネントサイズに影響する他の要因の調整に優れているため、setSizeを呼び出すよりもpackを使用することをお勧めします。

setBoundsのパラメーターは(int x、int y、int width、int height)xとyは位置/場所を定義し、幅と高さはフレームのサイズ/寸法を定義します。

0
DrSimplisist

Java Swing UIが機能する方法は、各JPanelに対して、コンポーネントを正確に配置する場所を決定する LayoutManager が常に存在することです。各レイアウトマネージャの動作は異なるため、たとえばBorderLayoutを使用する場合、setBounds()はLayoutManagerによって使用されず、代わりにコンポーネントの配置はEast、West、South、North、Centerによって決定されます。

ただし、NullLayoutManagerの場合(new JPanel(null)を使用した場合)、各コンポーネントにはxおよびy座標が必要です。愚かな補足:UIが3次元の場合、z座標もあります。

したがって、public void Component.setBounds(int x, int y, int width, int height)を使用して、コンポーネントの配置場所と、幅と高さのピクセル数を指定します。

以下に例を示します。

import Java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class JTableInNullLayout
{
  public static void main(String[] argv) throws Exception {

      JPanel panel = new JPanel(null);

      JLabel helloLabel = new JLabel("Hello world!");
      helloLabel.setBounds( 10, 50, 60, 20 ); // x, y, width, height
      panel.add(helloLabel);

      JFrame frame = new JFrame();
      frame.add(panel);
      frame.setPreferredSize( new Dimension(200,200));
      frame.pack();
      frame.setVisible(true);
  }
}
0
Axel Podehl