Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    2

    repaint() di un modello contenente due punti

    Salve a tutti, sono un neo- programmatore in Java appena trasferito da c++ per la semplicità della programmazione GUI.

    Tuttavia non capisco come trattare il repaint di modelli contenenti più oggetti grafici
    nell' istante in cui i parametri di tali oggetti vengano cambiati.

    Questo è il semplice programma (purtroppo buggato) che finora ho creato:
    (qualcuno mi spieghi anche a parole come si risolvono problemi del genere)

    ------------------------------------------------------------------------------------
    1^FILE, MAIN

    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JComponent;

    public class THEGraphics
    {


    public static void main(String[] args)
    {

    class ModelComponent extends JComponent
    {

    public Pnt pnt1;
    public Pnt pnt2;



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

    pnt2.paintComponent(g2);
    pnt1.paintComponent(g2);
    }

    public void CreateComponent()
    {

    pnt1 = new Pnt(50,50);
    pnt2 = new Pnt(100,100);

    }
    public void ModifyComponent(int x, int y)
    {

    pnt2.moveTo(x,y);
    }


    public void ModifyComponent2()
    {
    pnt1.moveTo(200,200);
    pnt2.moveTo(10,10);
    }

    }

    final ModelComponent modello = new ModelComponent();
    modello.CreateComponent();

    class MousePressedListener implements MouseListener
    {

    public void mousePressed(MouseEvent event)
    {

    modello.ModifyComponent2();

    System.out.println("Premuto");

    }
    //metodi che non fanno nulla
    public void mouseReleased(MouseEvent event){}
    public void mouseClicked(MouseEvent event){}
    public void mouseEntered(MouseEvent event){}
    public void mouseExited(MouseEvent event){}



    }


    MouseListener listener = new MousePressedListener();

    modello.addMouseListener(listener);


    JFrame frame = new JFrame();
    frame.setSize(800,600);
    frame.setTitle("OpenFem Model");


    frame.add(modello);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
    frame.setVisible(true);
    }

    }

    -------------------------------------------------------------------------
    2^ FILE

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import javax.swing.JComponent;

    public class Pnt extends JComponent
    {

    private Rectangle point;
    private int DIM_POINT = 2;
    private int X_POS;
    private int Y_POS;

    public Pnt()
    {
    point = new Rectangle(X_POS,Y_POS,
    DIM_POINT,DIM_POINT);
    }

    public Pnt(int x,int y)
    {
    DIM_POINT = 2;//default
    X_POS = x - DIM_POINT;
    Y_POS = y - DIM_POINT;
    point = new Rectangle(X_POS,Y_POS,
    DIM_POINT,DIM_POINT);
    }

    public Pnt(int x,int y,int dim)
    {
    DIM_POINT = 2*( dim - 1 );
    X_POS = x - dim;
    Y_POS = y - dim;
    point = new Rectangle(X_POS,Y_POS,
    DIM_POINT,DIM_POINT);
    }

    public void ChangeDim(int dim)
    {
    DIM_POINT = dim;
    }

    public void paintComponent(Graphics g)
    {
    point = new Rectangle(X_POS,Y_POS,
    DIM_POINT,DIM_POINT);
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.draw(point);
    }

    public int get_X_POS()
    {
    return X_POS;
    }

    public int get_Y_POS()
    {
    return Y_POS;
    }

    public int get_DIM_POINT()
    {
    return DIM_POINT;
    }

    public void set_X_POS(int x)
    {
    X_POS = x;
    repaint();
    }

    public void set_Y_POS(int y)
    {
    Y_POS = y;
    repaint();
    }

    public void set_DIM_POINT(int dim)
    {
    DIM_POINT = dim;
    repaint();
    }

    public void moveBy(int dx, int dy)
    {
    point.translate(dx,dy);
    repaint();
    }

    public void moveTo(int x, int y)
    {
    point.setLocation(x,y);
    repaint();
    }

    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: repaint() di un modello contenente due punti

    Originariamente inviato da Kaio_82
    Questo è il semplice programma (purtroppo buggato) che finora ho creato:
    (qualcuno mi spieghi anche a parole come si risolvono problemi del genere)
    No alt. A parte il "buggato" ci sono comunque svariate cose inappropriate e poco valide/pulite.

    1) Il fatto che hai dichiarato delle "local" inner class non è affatto una buona/bella cosa. Ma principalmente perché non c'è assolutamente alcun motivo valido per farlo. E oltretutto tra i 3 tipi di inner class, quelle locali sono, credo, le meno usate/note in assoluto.
    Quindi evita queste cose.

    2) Hai fatto nell'altro file una classe Pnt che estende JComponent. Quindi dovrebbe essere un "componente" da usare come qualunque altro componente AWT/Swing, cioè da inserire dentro un qualche "contenitore" (come si mette ad es. un JButton dentro un JPanel). E invece no .... oggetti Pnt li istanzi in ModelComponent e su questi ci invochi banalmente e direttamente paintComponent(). Questo metodo non è fatto per essere invocato direttamente da te o comunque dall'esterno del componente. Oltretutto paintComponent() dovrebbe restare marcato protected e non dovresti "aprire" il livello di accesso a public. Questo è un metodo che rappresenta, per così dire, un contratto "privato" tra JComponent e il "tuo" componente. È il framework che invoca attraverso la superclasse JComponent il paintComponent().

    3) Non avendo usato gli oggetti Pnt come "componenti" nel vero senso come inteso in AWT/Swing, invocare un repaint() lì dentro non serve assolutamente a nulla.

    4) Infine i nomi di metodi e variabili non seguono le convenzioni di denominazione "standard".

    Io ti suggerirei di chiarirti le idee .... e se guardi tra i miei Java Examples (vedi firma), trovi svariati esempi di uso dei componenti e della grafica.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    2

    Grazie mille

    Grazie mille, anche per gli esempi di codice ben fatto.

    Adesso mi metterò a fare qualcosa di divertente. Che ne so, un CAD.

    Visto che ci sono, sai se per caso esistono librerie per la gestione delle parti in
    vista nel disegno 3D?
    Stavo per mettermi ad implementarlo da solo, ma dato che mi sembra di capire che
    esistono librerie in grado di fare un pò di tutto....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.