» »

Java, pozicija kurzorja znotraj JPanel

Java, pozicija kurzorja znotraj JPanel

marjan_h ::

Lep pozdrav, Imam košček sledeče kode:
panel = new JPanel();
panel.setBackground(Color.white);
panel.setBounds(80,10, 500, 450);
Ta panel potem dodam na JFrame. Zanima me kako bi dobil koordiante kurzorja znotraj tega panela. Tako, da bi bi bilo koordinatno izhodišče (0,0), v levem zgornjem kotu panela. Moram tudi zaznati klik znotraj panela. Kot sem na internetu gledal, MouseInfo ne pride v poštev, ker ta dobi koordinate od celotnega zaslona. Hvala za odgovore.
  • spremenil: marjan_h ()

marjan_h ::

Po nekaj času iskanja, sem našel MouseListener, kar bom verjetno uporabil ko bo uporabnik levo-kliknil miško.

Kaj se pa uporablja, da dobim koordinate kurzorja znotraj JPanel?

Wrop ::

Poglej dokumentacija
Drugače pa
Point point = panel.getMousePosition();

marjan_h ::

Sedaj mi dela, HVALA.

Mi lahko kdo še razloži naslednjo kodo:
/*
 * Output:
 *  
 */

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainClass extends JPanel {

  public void paint(Graphics g) {
    g.drawLine(25, 25, 120, 120);
  
  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new MainClass());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200,200);
    frame.setVisible(true);
  }
}


Kako se lahko tukaj izriše črta na zaslonu, gdrawline je definiran v metodi paint, te pa nikoli ne kličemo nikjer.

Kako to dela?

Hvala za pomoč

Wrop ::

Tvoj razred je podrazred JPanel. Ta pa ima še en nadrazred JComponent. Ta nadrazred ima metodo paint, ki jo ti v tvojem razredu prepišeš s svojo metodo (z istim imenom (narediš override)). Vsakič, ko se tvoj MainClass (JPanel) izriše na zaslonu se kliče metoda paint, ki pa si jo ti prepisal s svojo metodo paint. Torej se kliče tvoja metoda, ne pa metoda, ki je napisana v nadrazredu JComponent.

marjan_h ::

Kako veš da se kliče metoda paint, nikjer nismo rekli eksplicitno;

MainClass objekt = new MainClass()
objekt.paint(g_parameter)


Jaz vem, le da se konstruktor kliče ko objekt ustvarimo. Metode se pa morajo klicati vedno eksplicitno.

Wrop ::

Tvoj MainClass razred je razširjen JPanel. S tem si podedoval vse metode in spremenljivke vseh nadrazredov, vse do razreda Object.
JPanel ima podedovane metode razreda JComponent. Ta JComponent razred ima metodo paint.
Ko se objekti izrisujejo, swing kliče metodo paint. Ponavadi kliče metodo paint v JComponent razredu, če pa jo redefiniraš v svojem objektu, pa kliče tvoj paint.
Paint metode naj se ne bi klicalo direktno, ker to počne swing.

marjan_h ::

Hvala Wrop, za tvoj odgovor.

Sedaj razumem, torej vedno se kliče metoda paint in karkoli definiram v njej se izrise.

Kako pa potem narediš, da ko klikneš recimo gumb, da se izrišejo črte, krivulje itd...?

Ker ko ustvariš objekt, se že izriše, kot ti praviš Wrop; se kliče metoda paint.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Zasnova shoot em up igre

Oddelek: Programiranje
111189 (868) PecenkA
»

[Java] Nova nit znotraj JPanel.paintComponent()

Oddelek: Programiranje
141941 (1728) alexa-lol
»

[JAVA] branje iz datoteke

Oddelek: Programiranje
242402 (2037) Bela01
»

[Java]Vprašanja

Oddelek: Programiranje
242103 (1571) Bela01
»

[NALOGA][Java] Težave pri pisanju slikarja

Oddelek: Programiranje
202286 (1928) l0g1t3ch

Več podobnih tem