-1

JPanelを別のに追加JPanelして、最初の の特定の場所に配置しようとしていJPanelます。でこれをやっていsetBounds(x, y, w, h)ます。これを行うべきではないことはわかっていますが、(アニメーションとして) 移動する方法が必要です。

私が抱えている問題は、Y が機能しないことです。私が行うgetBounds()と、正しい値に設定されますが、画面上で移動しません。にLayout設定していnullます。

最初JPanel

public WarehousePanel()
{
    super(null);

    gantries = new Gantry[5];

    for (int i = 0; i < gantries.length; i++)
    {
        gantries[i] = new Gantry(3);
        add(gantries[i]);
        System.out.println(gantries[i].getY());
        gantries[i].setBounds(15 * (i + 1), 100, 10, 50);
        System.out.println(gantries[i].getBounds());
    }
}'

2番目JPanel:

public Gantry(int y)
{
    this.y = y;

    packageY = new ArrayList();

    setBackground(Color.red);
    setPreferredSize(new Dimension(10, 50));
}

前もって感謝します。

4

2 に答える 2

0

おそらく、装飾されていないJInternalFrameの使用を検討してください。それはあなたがやりたいことをはるかに少ない手間で行います。また、一般に、レイアウト マネージャーの代わりに setBounds を使用することは悪い考えと考えられています。

あなたが絶対にこの方法で物事を行うことに決めているなら、仕様に従ってコンポーネントクラスの repaint メソッドを呼び出していますか?

最後に、親 JPanel のサイズが、子コンポーネントでの setBounds 呼び出しに対応するのに十分な大きさであると確信していますか?

于 2016-04-22T14:55:37.127 に答える
0

正解です。画面上の Y はまだ 5 に見えます。

これは、パネルにデフォルトの FlowLayout をまだ使用していることを示しています。

getBounds() を実行すると、正しい値 rk に設定されます。

はい、値を割り当てた直後に値を表示しています。それはあなたに何も教えてくれません。フレームが表示された後に境界を表示する必要があります。フレームを表示すると、レイアウト マネージャーが呼び出されます。

したがって、null レイアウトを使用していることを再確認してください。

それでも解決しない場合は、問題を示すSSCCEを投稿してください。したがって、JFrame を作成し、レイアウトを null に設定します。次に、JPanel を作成し、その境界と背景を設定して、パネルをフレームに追加します。基本的なコードが機能することを自分自身で証明してください。次に、作業コードと自分のコードの違いを判断します。

于 2016-04-22T14:56:33.130 に答える