2

100x100 のフレームと 400x400 の画像があります。フレーム全体にレイヤード ペインがあり、レイヤード ペイン内に画像があります。お気づきのように、画像はフレームよりも大きいため、画像の一部、つまり画像の左上部分のみが表示されます。フレームに対して X=32、Y=40、幅 = 10、高さ = 10 (基本的には長方形) の画像に男性がいるとします。

質問

  1. 画像は400x400ですよね?つまり、実行時に画像の 100x100 の部分しか見ることができず、表示されている画像の部分は左上の部分ですよね? しかし、画像に対して 350x350 の位置にある建物を表示したい場合、どうすればよいでしょうか (画像の下部にあるため、表示されません)。
  2. 最初の質問が解決されたと仮定し、次に「フレーム」に対して幅 = 20、高さ = 20 の 350x350 の建物があるとします。実行時に画像を表示すると(質問1が解決されたと仮定すると、画像の下部が表示されます)、建物のフレームの座標は変更されません。つまり、フレームに対して350x350のままでなければなりません。
4

1 に答える 1

3

ポイント1)画像を a に追加してから に追加するか、画像を a に追加してJPanelJFrame最終JPanelJScrollPaneJFrame. JPanelとは両方とも#scrollRectToVisibleJScrollPaneを使用してプログラムによるスクロールをサポートします。

これは scrollRectToVisible の(一種の)作業サンプルです

JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
panel2.setPreferredSize(new Dimension(200, 11000));
SpringLayout layout = new SpringLayout();
panel2.setLayout(layout);
for (int i = 0; i < 100; i++) {
    JLabel textField = new JLabel();
    textField.setText("textfield number " + i);
    textField.setPreferredSize(new Dimension(150, 100));
    layout.putConstraint(SpringLayout.NORTH, textField, i * 110, SpringLayout.NORTH, panel2);

    panel2.add(textField);
}
JScrollPane scrollPane = new JScrollPane(panel2, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(200, 500));

panel2.scrollRectToVisible(new Rectangle(0, 800, 150, 100));

panel.add(scrollPane);

パネル変数を JFrame に追加すると、このコードを実行できるようになります。また、これはサンプル コードであり、コンポーネントをパネルに追加するための実際のコード記述方法ではないことに注意してください:P

ポイント 2) このクエリはまだ完全には理解できていないので、2 回に分けて回答します。a) 相対計算が重要な理由がわかりません。私が提供したサンプルを試して、必要なことができるかどうかを確認できますか? Rectangleそうでない場合は、オプション b をお読みsetLocation(int, int)ください。あなたが何をしようとしているのかを完全には理解しておらず、遊ぶことができるコードサンプルがないため、より正確な回答やコードサンプルを提供することはできません.

于 2012-09-09T15:24:25.987 に答える