2

質問があります。ボディ MousePressed でガラス板を作成できますか? はいの場合、誰かが私にどのように書くことができますか? つまり、マウス ボタンを押すとガラス板が表示され、その上にペイントできます。

編集

わかりました、私は今欲しいものを持っています。マウス ボタンをクリックするとガラス ペインが作成され、このボタンを離すと消えます。今、私は別の質問があります。ペイント方法を作成する場所。マウスをドラッグして、このガラス ペインに四角形を描画します。ペイントメソッドをどこに実装する必要がありますか? 他のクラスやこのイベントで?私は試してペイント機能を実装していますが、これが良い方法かどうかはわかりません。これは私のコードです:

public class Selection extends JPanel
{
    static Point startPoint;
    public static void GUI()
    {

        final JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        JButton button = new JButton("Select");
        final JPanel glassPane = new JPanel();


        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.add(button);
        glassPane.setOpaque(false);
        frame.add(panel);


        frame.setGlassPane(glassPane);
        glassPane.addMouseListener(new MouseAdapter()
        {

            @Override
            public void mousePressed(MouseEvent e)
            {
                super.mousePressed(e);
                System.out.println("f.getGlassPane() mousePressed");
                if(e.getButton() == MouseEvent.BUTTON1)


                frame.getGlassPane().setVisible(true);

                startPoint=e.getPoint();

                Graphics2D g = null;
                Graphics2D g2 = (Graphics2D) g;
                Rectangle2D rect = new Rectangle2D.Double();
                rect.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5F));
                g2.setColor(Color.BLUE);
                g2.fill(rect);
                g2.draw(rect);

            }

        });
        glassPane.addMouseMotionListener(new MouseMotionListener() {


            @Override
            public void mouseDragged(MouseEvent e) 
            {


            }

            @Override
            public void mouseMoved(MouseEvent e) {
                // TODO Auto-generated method stub

            }
        });

        frame.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mousePressed(MouseEvent e)
            {
                super.mousePressed(e);
                if(e.getButton() == MouseEvent.BUTTON1)

                frame.getGlassPane().setVisible(true);

            }
            public void mouseReleased(MouseEvent e)
            {                     
                    frame.getGlassPane().setVisible(false);
            }
        });



        frame.setVisible(true);
    }


        int x1, x2, y1,y2;
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;
             g2.drawRect(x1,y1, x2, y2);
        }


    public static void main(String[] args) 
    {

        GUI();
    }

}
4

2 に答える 2

2

こんにちは、ガラス板を使用してダイアログの動作をシミュレートする方法を提示する他の質問に対する私の回答を確認してください。私の場合、マウスの右クリックでマウスクリックで表示および非表示にする方法を示しました。この例は、あなたがうまく始めるはずです。

于 2011-05-13T10:15:44.320 に答える
1

RootPaneContainerガラス板を作成してfrom insideメソッドに取り付けることに問題はありませんmoussePressed()

しかし、ユーザーがマウスをクリックするたびに、なぜ新しいガラス ペインを作成するのか疑問に思うかもしれません。それはあまりパフォーマンスが高くありません。前面にガラス ペインを作成して取り付け、マウス クリック時にその内容を変更する方がおそらく賢明です)。

さて、「ガラス板に絵を描く」に関しては、「絵を描く」が何を意味するかにもよりますが、これが「Graphics」インスタンスを使用してガラス板に直接描画することを意味する場合、答えは NO です (まあ、実際にはできますが、あなたの絵は最初のUIの更新で消えます...)

このようなペイントpaintComponent()は、ガラス板の方法で行う必要があります (オーバーライドする必要があります)。

于 2011-05-13T10:16:01.090 に答える