Swing i rysowanie

0

Witam. Dopiero co zacząłem swoją przygodę z javą. Napisałem aplikacje gdzie na panelu mam trzy buttony. Lecz mam problem. Chciałem dodać funkcje zaznaczania. Tzn takiego jak mamy w Windowsie. Przyciskamy lewy przycisk i wraz z ruchem myszki rozciąga nam się obszar zaznaczania. I tu mam pytanie. Czy jest jakiś konkretny interfejs do tego czy muszę to robić ręcznie, tzn. wywoływać odpowiednie metody nasłuchujące i tam rysować przezroczysty prostokąt itp?

0

Wyjaśnienie napisałeś trochę nieprecyzyjnie...masz 3 butony na panelu i co dalej?

Chcesz jeszcze na tym panelu rysować jakieś figury?
Czy może chcesz zaznaczyć jakoś te buttony ?

0

Oj sorki. Chciałbym móc zaznaczać buttony. Tylko właśnie nie klikając na buttony, tylko tak jak się to robi np na pulpicie, rozciągając obszar zaznaczenia myszką.

0

lol ciężki orzech....

może tutaj znajdziesz coś czego szukasz...
http://download.oracle.com/javase/tutorial/uiswing/components/button.html

tam jest program który po naciśnięciu jednego0 buttona uniemożliwia naciśnięcie innych...

0

A odnośnie tego zaznaczania masz może jakieś pomysły?

0

ciężki temat....

ja bym na twoim miejscu pokombinował z mouseListenerem czyli pobierał wartości pozycji kursora i jeżeli wchodziłyby one w obszar buttona to button automatycznie by się załączał
w thinking in java jest bardzo fajny przykład :

public class Main extends JFrame {

    private HashMap<String, JTextField> h =
            new HashMap<String, JTextField>();
    private String[] event = {
        "focusGained", "focusLost", "keyPressed",
        "keyReleased", "keyTyped", "mouseClicked",
        "mouseEntered", "mouseExited", "mousePressed",
        "mouseReleased", "mouseDragged", "mouseMoved"
    };
    private MyButton b1 = new MyButton(Color.BLUE, "test1"),
            b2 = new MyButton(Color.RED, "test2");

    class MyButton extends JButton {

        void report(String field, String msg) {
            h.get(field).setText(msg);
        }
        FocusListener fl = new FocusListener() {

            public void focusGained(FocusEvent e) {
                report("focusGained", e.paramString());
            }

            public void focusLost(FocusEvent e) {
                report("focusLost", e.paramString());
            }
        };
        KeyListener kl = new KeyListener() {

            public void keyPressed(KeyEvent e) {
                report("keyPressed", e.paramString());
            }

            public void keyReleased(KeyEvent e) {
                report("keyReleased", e.paramString());
            }

            public void keyTyped(KeyEvent e) {
                report("keyTyped", e.paramString());
            }
        };
        MouseListener ml = new MouseListener() {

            public void mouseClicked(MouseEvent e) {
                report("mouseClicked", e.paramString());
            }

            public void mouseEntered(MouseEvent e) {
                report("mouseEntered", e.paramString());
            }

            public void mouseExited(MouseEvent e) {
                report("mouseExited", e.paramString());
            }

            public void mousePressed(MouseEvent e) {
                report("mousePressed", e.paramString());
            }

            public void mouseReleased(MouseEvent e) {
                report("mouseReleased", e.paramString());
            }
        };
        MouseMotionListener mml = new MouseMotionListener() {

            public void mouseDragged(MouseEvent e) {
                report("mouseDragged", e.paramString());
            }

            public void mouseMoved(MouseEvent e) {
                report("mouseMoved", e.paramString());
            }
        };

        public MyButton(Color color, String label) {
            super(label);
            setBackground(color);
            addFocusListener(fl);
            addKeyListener(kl);
            addMouseListener(ml);
            addMouseMotionListener(mml);
        }
    }

    public Main() {
        setLayout(new GridLayout(event.length + 1, 2));
        for (String evt : event) {
            JTextField t = new JTextField();
            t.setEditable(false);
            add(new JLabel(evt, JLabel.RIGHT));
            add(t);
            h.put(evt, t);
        }
        add(b1);
        add(b2);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame fr = new Main();
                fr.setVisible(true);
                fr.setSize(800, 800);
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    }
}

 

tam masz sprawdzanie gdzie aktualnie znajduje się kursor...

Może coś w tym kierunku :)

0

Dzięki. Będę coś kombinował :)

0

Posiedziałem nad tym i udało mi się zrobić coś takiego. Ogólnie działa z jednym problemem. Podczas rysowania prostokąta znika mi button. A chciałbym żeby nie było tego widać. Ma ktoś jakiś pomysł. Oto kod:

   import java.awt.AlphaComposite;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class zaznacz extends JPanel implements MouseListener, MouseMotionListener
{


     Rectangle newLine=null;
     public zaznacz() 
     {

            addMouseListener(this);
            addMouseMotionListener(this);

        }


        static class Rectangle {

            int x1,y1,x2,y2;

            Rectangle(int _x1, int _y1,int _x2, int _y2){

                x1=_x1;y1=_y1;x2=_x2;y2=_y2;
            }



             void paint(Graphics g)
             {



                 g.drawRect(x1, y1, x2, y2);


            }

        }
        public void mouseClicked(MouseEvent e) {

                }

        @Override
        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
        @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 mouseReleased(MouseEvent e) 
        {
            repaint();

        }
        Point startPoint;


        @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);
            paint(g2);


        }
        @Override
        public void mouseMoved(MouseEvent e) {


        }
        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);


            }
        });
    }

}

Ma ktoś jakiś pomysł?

1 użytkowników online, w tym zalogowanych: 0, gości: 1