8

にをJPanel追加しましたがJViewport、パネルには他のいくつかのパネルが追加されています。マウスをドラッグして複数のコンポーネントを選択できるドラッグ選択を実装しようとしています。私が直面している唯一の問題は、メインに追加されたコンポーネントの後ろに選択長方形がペイントされていることJPanelです。どうすればそれらの上にペイントできますか?

私の構造は次のとおりです:
JFrame-> ContentPane-> JLayeredPane-> JScrollPane-> JPanel-> JPanel []

大学の課題の設計案:
ご覧のとおり、長方形は他のパネルの後ろにあります。

大学の割り当てのための設計草案。

4

6 に答える 6

12

これは私がすでに行っていることです (明らかにはるかに単純なレベルで)。Swing は、追加されたコンポーネントの下に四角形を描画します。

これは、paintComponent() メソッドではなく、パネルの paint() メソッドをオーバーライドする必要がある 1 つのケースです。次に、すべての子コンポーネントがペイントされた後に、カスタム ペイントが実行されます。

于 2012-01-08T16:51:14.800 に答える
5

レイヤードペインを使用する:

http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

これにより、重複するコンポーネントを作成できます。

ガラスペインを使用してドラッグペインティングを処理し、場合によってはイベントも処理します。

http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html#glasspane

于 2012-01-08T09:32:49.957 に答える
1

実際のコードを見ずに、何が間違っているのかを言うのは難しいです。しかし、私はまだ私が何をするかを言うことができます:

描画する領域全体を表すJPanelを作成します。これには、もちろん、すべてのコンポーネントが含まれます。
そのパネルを次のようにオーバーライドします(編集済み、メソッド名の最後の文字になっているpaintComponents(Graphics)ことに注意してください)。s

@Override
public void paintComponents(Graphics g)
{ //                      ^
    super.paintComponents(g);

    // Draw your selection rectangle:
    g.setColor(Color.RED);
    g.drawRectangle(selectionRectangle); 
}
于 2012-01-08T09:31:40.733 に答える
1

本当に必要なものと最終的な効果を本当に確認してください。おそらく、ペイントする別の方法が2つあります

1)グラスペイン

2)ビューポート

Insets慎重に目に見えるようにまとめることができますRectanle

于 2012-01-08T09:49:20.933 に答える
0

JLayeredPane によって、Swing コンポーネントの上へのカスタム ペイントが容易になります。この記事では、特定の領域 (選択用の四角形やコンポーネントの境界など) のオーバーペイントを容易にする抽象基本クラスについて説明します。

于 2012-12-28T16:24:30.160 に答える
0

わかりました、これが私が最終的にやろうと決めたことです。
これが最善の方法かどうかはわかりませんが、問題なく動作するようです。
注: MigLayout を使用します。色付きのブロックの下に

あるコンストラクター。JPanel

 ...
 this.add(new JPanel() {

     @Override
     public boolean isOpaque() {
        return false;
     }

     @Override
     public void paintComponent(Graphics g) {
        if (dragShape != null) {
           g.setColor(Colors.SECONDARY);
           g.setStroke(new BasicStroke(2));
           g.draw(dragShape);
        }
     }
  }, "pos 0 0, width 100%, height 100%", 0);
  ...
于 2012-01-08T10:36:21.747 に答える