Swingを使用して選択ボックスを描画する

awt java swing
Swingを使用して選択ボックスを描画する

パネルと3つのボタンを持つアプリケーションを作成しました。 マウスを使用してこのボタンの選択を追加します。 デスクトップのWindowsにあるようなものです。 マウスの左ボタンを押すと、マウスの動きに応じて領域の選択が拡大します。

これに特定のインターフェイスがありますか、またはイベントリスナーに適切なメソッドを手動で呼び出して、透明な長方形を描画しますか? これが写真です。

image:https://i.stack.imgur.com/CItpD.jpg [スクリーンショットの例]

したがって、マウスでドラッグしたイベントを使用して四角形をペイントすると、ボタンが再描画されるため、ユーザーが点滅するボタンを見るのに問題があります。 長方形をペイントするときにこのボタンが消えないようにしたいです。 glassPaneを使用する必要があると思います。 これが私の考えです。 フレームがあります。 フレームにボタン付きのパネルを追加し、透明な長方形をペイントする別のパネルが必要です。 私のボタンはまだ再描画されないと考えています。 この概念についてどう思いますか。 または、誰かが別のアイデアを持っているかもしれません。 これはコードです。

        @Override
        public void mousePressed(MouseEvent e) {
            startPoint=e.getPoint();
            setOpaque(true);

            Graphics2D g2 = (Graphics2D)getGraphics();

            Rectangle2D prostokat = new Rectangle2D.Double();
            prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y);
            g2.setComposite(AlphaComposite.getInstance(rule, alpha));
            g2.draw(prostokat);
            g2.setColor(Color.BLUE);
            g2.fill(prostokat);


        }



        @Override
        public void mouseDragged(MouseEvent e) {
            setOpaque(true);

            Graphics2D g2 = (Graphics2D)getGraphics();
            Rectangle2D prostokat = new Rectangle2D.Double();

            prostokat.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y);
            g2.setComposite(AlphaComposite.getInstance(rule, alpha));
            g2.draw(prostokat);
            g2.setColor(Color.BLUE);
            g2.fill(prostokat);
            paintComponent(g2);


        }

        int rule = AlphaComposite.SRC_OVER;
        float alpha = 0.85F;




    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable()
        {
public void run()
            {
                zaznacz rys = new zaznacz();
                JFrame frame = new JFrame();
                JButton Button = new JButton("1");
                JPanel panel = new JPanel();



                panel.add(Button);
                rys.add(panel);
                frame.setSize(400,300);
                frame.setVisible(true);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                panel.setOpaque(false);

                frame.add(rys);


            }
        });
    }

}

コードは完璧ではないが、ほとんど機能することを知っています。 少し問題があります。 マウスボタンを押してドラッグすると、ボタンが消えます。 image:https://i.stack.imgur.com/Ppmb3.jpg [ここに画像の説明を入力] image:https://i.stack.imgur.com/Y9teM.jpg [ここに画像の説明を入力]

「コードが間違っている」などのアドバイスは必要ありません。 私はそれを知っており、私は誰かが私が訂正しなければならないことを助けたいです。 mouseEventsでpaintComponent()を使用するのではなく、その方法でのみ透明な長方形をペイントできることを知っています。 または、透明な長方形をどのように描画できるかを考えてください。 私は試してみて、mouseDraggedメソッドを変更する必要があると思います。 私はこのメソッドからコードを削除し、ボタンの上に長方形を描くだけで大丈夫だからです。 しかし問題は、マウスをドラッグして長方形を描く必要があるときです。 ペイントを変更する必要がありますが、どうすればよいかわかりません。 誰でも私を助けたり、助けようとすることができますか?

  1  1


ベストアンサー

私はそのコードがこのフォーム(メイン)では機能しないと思う、おそらく誰かがそれをあなたのためにデバッグするでしょう、Joeyのアドバイスに従ってください

とにかく続きます(Oracle Javaチュートリアル)http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

2


タイトルとURLをコピーしました