Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ JAVA ] problem ze zmienną

zabulcon 12 Cze 2010 11:52 1152 3
  • #1 12 Cze 2010 11:52
    zabulcon
    Poziom 9  

    Witam! Program który próbuje stworzyć składa się z paska narzędzi i pola na którym rysuje kwadrat lub kolo. Problem polega na tym że nie potrafię wykorzystać zmiennej "nrmenu" w klasie mysz, zmienna zmienia swą wartość podczas korzystania z paska narzędzi w klasie oknogl. Czy możliwe jest żeby zmienna była dostępna dla dwóch tych klas? Javy uczę się od niedawna wiec proszę o pomoc i wyrozumiałość :D




    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.geom.Ellipse2D.Double;

    import javax.swing.*;

    public class paint
    {
    public static void main(String[]args)
    {
    EventQueue.invokeLater(new Runnable()
    {
    public void run()
    {
    oknogl ss = new oknogl();
    ss.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ss.setVisible(true);
    }
    });
    }
    }
    class oknogl extends JFrame
    {
    public oknogl()
    {
    setTitle("Paincik");
    setSize(800,600);
    bp = new JPanel();
    add(bp, BorderLayout.CENTER);
    Action kwad = new AbstractAction("koniec", new ImageIcon("F:paint.image/kwad.gif"))
    {
    public void actionPerformed(ActionEvent event)
    {
    nrmenu=1;
    }
    };
    Action kolo = new AbstractAction("koniec", new ImageIcon("F:paint.image/kolo.gif"))
    {
    public void actionPerformed(ActionEvent event)
    {
    nrmenu=2;
    }
    };
    JToolBar b = new JToolBar();

    b.add(kolo);
    b.add(kwad);
    add(b, BorderLayout.WEST);
    JMenu me = new JMenu("Kolor");
    me.add(kwad);
    me.add(kolo);
    JMenuBar menuBar = new JMenuBar();
    menuBar.add(me);
    setJMenuBar(menuBar);
    mysz comp = new mysz();
    add(comp);
    }
    private JPanel bp;
    public int nrmenu;
    }
    class mysz extends JComponent
    {

    public mysz()
    {
    addMouseListener(new klik());
    addMouseMotionListener(new przec());
    }
    public void paintComponent(Graphics g)
    {
    Graphics2D g2 = (Graphics2D) g;

    if (nrmenu == 1)
    {
    for(double i = dl;i > 0;i--)
    {
    g2.setPaint(Color.RED);
    squ = new Rectangle2D.Double(px,py,wy,i);
    g2.draw(squ);
    }
    squ = new Rectangle2D.Double(px,py,wy,dl);
    g2.setPaint(Color.BLACK);
    g2.draw(squ);
    }
    if (nrmenu == 2)
    {
    for(double i = dl;i > 0;i--)
    {
    g2.setPaint(Color.RED);
    kol = new Ellipse2D.Double(px+i/2,py+i/2,wy-i,dl-i);
    g2.draw(kol);
    }
    kol = new Ellipse2D.Double(px,py,wy,dl);
    g2.setPaint(Color.BLACK);
    g2.draw(kol);
    }
    }
    private class klik extends MouseAdapter
    {
    public void mousePressed(MouseEvent ev)
    {
    xc = ev.getX();
    yc = ev.getY();
    }
    public void mouseClicked(MouseEvent ev){}
    }
    private class przec implements MouseMotionListener
    {
    public void mouseMoved(MouseEvent ev)
    {
    ev.getPoint();
    }
    public void mouseDragged(MouseEvent ev)
    {
    xd = ev.getX();
    yd = ev.getY();
    px=xc;
    py=yc;
    wy=xd-xc;
    dl=yd-yc;
    if (xc>xd){px = xd; wy = xc-xd;}
    if (yc>yd){py = yd; dl = yc-yd;}
    repaint();
    }
    }
    public double xc;
    public double yc;
    private Rectangle2D squ;
    public double xd;
    public double yd;
    public Rectangle2D s;
    public double px;
    public double py;
    public double wy;
    public double dl;
    private Ellipse2D kol;

    }

    0 3
  • #2 12 Cze 2010 12:16
    Dżyszla
    Poziom 42  

    Coś namieszane w tym kodzie - bp jest obiektem klasy JPanel czy klasą?

    A jeśli chcesz mieć zmienną widoczną we wszystkich obiektach danej klasy i dla wszystkich mającą tą samą wartość, to utwórz ją jako statyczną (Static).

    0
  • #3 12 Cze 2010 13:16
    zabulcon
    Poziom 9  

    hmm.. bp jest chyba obiektem, próbowałem już ze statyczną :cry: , a czy jest metoda sprawdzająca stan paska narzędzi? Szukałem w API i nie było ale możliwe ze przeoczyłem ją.

    0
  • #4 12 Cze 2010 16:43
    gaskoin
    Poziom 38  

    zabulcon napisał:
    Problem polega na tym że nie potrafię wykorzystać zmiennej "nrmenu" w klasie mysz, zmienna zmienia swą wartość podczas korzystania z paska narzędzi w klasie oknogl. Czy możliwe jest żeby zmienna była dostępna dla dwóch tych klas? Javy uczę się od niedawna wiec proszę o pomoc i wyrozumiałość :D


    wystarczy ją zadeklarować jako pole

    Code:
    public static Panel bp;


    odwołanie poprzez:
    Code:
    NazwaKlasy.bp


    ponieważ zmienne statyczne nie są przypisane do każdego obiektu z osobna, lecz dla wszystkich obiektów danego typu istnieje jedna taka zmienna.

    oczywiście - tak się tego nie powinno robić, powinieneś obiekt okna głównego przekazywać za pomocą konstruktora do czegoś podrzędnego i w ten sposób odwoływać się do elementu(ów) okna głównego[/code]

    0