problem z utworzeniem metody w prgoramie do rysowania figur

Odpowiedz Nowy wątek
2008-10-18 22:15
0

Witam. Mam taki oto problem. Tworzę program który ma rysować figury. Zaimplementowałem pakiet klas które obsługują każdą figurę, dam tu przykładową do obsługi ELIPSY, oto kod:

package klasyFigur;

import java.awt.;
import java.awt.geom.
;
/* ------------------------------------------------------------------------- /
public class Elipsa
{
public Elipsa()
{
elipsa = new Ellipse2D.Double(400,400,130,250);
kolor = new Color(69,139,116);
}

public void malujElipse(Graphics2D g2)
{
    g2.setPaint(kolor);
    g2.fill(elipsa);
}

private Ellipse2D.Double elipsa;
private Color kolor;

}

Teraz załączam główny plik programu z funkcją main i zaraz napiszę z czym mam problem.

package mainWindow;

import menuBars.MenuBar;
import menuBars.MenuElem;
import menuBars.MenuRozw;
import klasyFigur.*;

import java.awt.;
import java.awt.event.
;
import java.awt.geom.;
import javax.swing.
;

/* @author Mateusz Bednarz /

public class Figury
{
public static void main(String[] args)
{
MainWindow okno = new MainWindow();
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
okno.show();
}
}
//------------------------------------------------------------------------------
class MainWindow extends JFrame
{
public MainWindow()
{
setTitle("Program do rysowania figur");
setSize(600,750);
//setResizable(false);
ImageIcon ikona = new ImageIcon("src/ico.png");
Image ico = ikona.getImage();
setIconImage(ico);
}

    private MenuBar pasekMenu;
    private MenuRozw figura, menuPlik, menuTrans;
    private MenuElem linia, prostokat, kolo, elipsa, zakoncz, polaczFig,
            klonujFig, usunFig;

{
    // dołączamy do głównego okna programu pasek menu       
    pasekMenu = new MenuBar();

    // menu 'Plik'

    menuPlik = new MenuRozw("Plik");
    pasekMenu.add(menuPlik);

    zakoncz = new MenuElem("Zakończ");
    menuPlik.add(zakoncz);

    zakoncz.addActionListener(new ActionListener()
    {   
        public void actionPerformed(ActionEvent zdarzenie)
        {
            System.exit(0);
        }
    }); 

     // menu 'Wybór figury'

    figura = new MenuRozw("Wybór figury");
    pasekMenu.add(figura);

    linia = new MenuElem("Odcinek");
    figura.add(linia);

    prostokat = new MenuElem("Prostokąt");
    figura.add(prostokat);

    kolo = new MenuElem("Koło");
    figura.add(kolo);

    elipsa = new MenuElem("Elipsa");
    figura.add(elipsa);

    // menu 'Transformacje'

    menuTrans = new MenuRozw("Narzędzia");
    pasekMenu.add(menuTrans);

    polaczFig = new MenuElem("Połącz figury");
    menuTrans.add(polaczFig);

    klonujFig = new MenuElem("Klonuj figurę");
    menuTrans.add(klonujFig);

    usunFig = new MenuElem("Usuń figurę");
    menuTrans.add(usunFig);

    setJMenuBar(pasekMenu);

    // dołączamy panel do okna głównego programu

    PanelRysunku panel = new PanelRysunku();
    Container powZawartosci = getContentPane();
    powZawartosci.add(panel);
}

}
/* Panel wyświetlający figury geometryczne /

class PanelRysunku extends JPanel
{
public PanelRysunku()
{
setBackground(new Color(255,255,255));
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
}
}

Chodzi mi o to. Jak teraz zaimplementować w tym kodzie metodę i słuchacza zdarzeń który będzie mi rysował elipsę po kliknięciu na przycisk 'Elipsa'. Mam mniej więcej pojęcie o ActionListener'ach, ale próbowałem to zrobić na milion sposobów i mi nie wychodzi. Będę bardzo wdzięczny za wszelką pomoc.

Pozdro</span>

Pozostało 580 znaków

2008-10-19 02:15
0

Robisz podobnie jak to zrobiles z zakonczeniem programu, tylko w przycisku zamiast System.exit(0); piszesz cosik takiego:
new Elipsa().malujRlipse(g);

Pozostało 580 znaków

2008-10-19 11:21
0

Kurde, takie rozwiązanie nie działa, pisze mi błąd, że brakuje wartości 'g'. Mi się wydaje, że problem jest związany z odniesieniem do paintComponent(), i nie wiem jak ten problem rozwiązać....;-/

Pozostało 580 znaków

2008-10-19 12:30
abe
0

Prościej "wytłumaczyć" się już nie da:

final PanelRysunku panel = new PanelRysunku();
Container powZawartosci = getContentPane();
powZawartosci.add(panel);

elipsa.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        new Elipsa().malujElipse((Graphics2D) panel.getGraphics());
    }
});

Pozostało 580 znaków

2008-10-19 12:41
0

Dziękówa abe, nareszcie wiem jak to zrobić, mogę ruszyć dalej z pisaniem kodu, bo się z deka zawiesiłem na tym, a że jestem początkujący to czasami ciężko mi idzie:-/ dzięki jeszcze raz:-) Pozdro

Pozostało 580 znaków

2008-10-19 21:08
0

Mam jeszcze jeden problem. Jeżeli na moim panelu umieszczam obiekt JLabel, a mianowicie następujący fragment kodu:

twojeFigury = new JLabel("Twoje figury : ");
panel.add(twojeFigury);

Wiadomo proste. Chce żeby mój JLabel był po lewej stronie. Wykorzystuje metodę setHorizontalAlignment(SwingConstants.LEFT). Jednak jakiego parametru nie użyje mój JLabel nadal jest w tym samym miejscu. No i nie wiem, czy może w reszcie programu jest coś co uniemożliwia przesunięcie JLabel'a na poprawne miejsce??? Za wszelkie rady serdeczne dzięki ;-)

Pozostało 580 znaków

2008-10-19 21:31
0

A jaki masz menadżer rozkładu na tym panelu ?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2008-10-19 22:03
0

Ja to pisze w czystym kodzie, nie przez JFrame Form. Jestem początkującym programistą, i że tak zapytam...co to jest MENEDŻER ROZKŁADU???

Pozostało 580 znaków

2008-10-19 22:12
0

Odważny jesteś, z taką znajomością Javy brać się za programy z GUI.
Menadżer rozkładu to obiekt rozmieszczający komponenty wg pewnych reguł.
Dodaj wiersz (po skonstruowaniu obiektu o nazwie panel)

panel.setLayout(new FlowLayout(FlowLayout.LEFT));

Menadżer klasy FlowLayout umieszcza komponenty jeden za drugim, jak się nie mieszczą to przechodzi do kolejnego wiersza. Domyślny menadżer dla klasy JPanel, to FlowLayout(FlowLayout.CENTER).


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2008-10-19 22:19
0

Dzięki bogdans, przydało się:-) A co od mojej odwagi, trochę mnie zmuszają do tego zajęcia, ale bardziej to moje dobre chęci do tego, żeby nauczyć się profesjonalnie programować w jakimś nowoczesnym języku i mam nadzieję, że mi się uda:-) Pzdr

Pozostało 580 znaków

2008-10-20 08:34
0

Napisałeś

Ja to pisze w czystym kodzie, nie przez JFrame Form

Co właściwie miałeś na myśli ? Jeśli chciałeś powiedzieć, że nie używasz żadnych narzędzi do wyklikania programu, to należy Ci się pochwała. Ale jaki to ma związek z używaniem JFrame ?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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