Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Disegnare in java

    Non capisco bene come funziona il disegno in java

    ho creato un applicazione grafica, un JFrame, aggiungendo ogni elemento direttamente sulla finestra, quindi

    JFrame mio = new JFrame();

    e poi

    JButton pulsante = new JButton("prova");
    pulsante.setBounds(...);
    mio.add(pulsante);

    e funziona tutto...ma ora ho bisogno di disegnare una freccia tra due pulsanti..e non so come fare, se faccio

    mio.getContentPane().getGraphics().drawLine(...);
    mio.repaint();

    non funziona...allora ho provato a fare una classe Arrow che estende JComponent e ha un metodo:

    public void paintComponent(Graphics g){
    g.drawLine(...);
    }

    e poi
    mio.getContentPane().add(new Arrow());

    ma anche questo non funziona...

    qualcuno potrebbe aiutarmi?

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

    Re: Disegnare in java

    Originariamente inviato da cribcaged
    allora ho provato a fare una classe Arrow che estende JComponent e ha un metodo:

    public void paintComponent(Graphics g){
    g.drawLine(...);
    }

    e poi
    mio.getContentPane().add(new Arrow());

    ma anche questo non funziona...
    Perché probabilmente non hai capito come funziona il "rendering" nelle interfacce utente basate su "eventi".

    Osserva e prova attentamente il seguente codice che ho scritto (nota, Java 5 o superiore):

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    
    public class LinesTestFrame extends JFrame
    {
        private LinesComponent lines;
        private JButton button;
    
        public LinesTestFrame ()
        {
            super ("Lines Test");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (300, 300);
    
            lines = new LinesComponent ();
    
            add (lines, BorderLayout.CENTER);
    
            button = new JButton ("Aggiungi una linea casuale");
    
            add (button, BorderLayout.SOUTH);
    
            button.addActionListener (new ActionListener () {
                public void actionPerformed (ActionEvent e) {
                    Point start = new Point ((int) (Math.random () * 200), (int) (Math.random () * 200));
                    Point end = new Point ((int) (Math.random () * 200), (int) (Math.random () * 200));
    
                    Line l = new Line (start, end, Color.RED);
    
                    lines.addLine (l);
                }
            });
        }
    
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable ()
            {
                public void run ()
                {
                    LinesTestFrame f = new LinesTestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    
    
    class Line
    {
        private Point start;
        private Point end;
        private Color color;
    
        public Line (Point start, Point end, Color color)
        {
            this.start = start;
            this.end = end;
            this.color = color;
        }
    
        public Point getStartPoint () { return start; }
        public Point getEndPoint () { return end; }
        public Color getColor () { return color; }
    }
    
    
    class LinesComponent extends JComponent
    {
        private ArrayList<Line> lines;
    
        public LinesComponent ()
        {
            lines = new ArrayList<Line> ();
        }
    
        public void addLine (Line l)
        {
            lines.add (l);
            repaint ();
        }
    
        public void paintComponent (Graphics g)
        {
            super.paintComponent (g);
    
            for (Line l : lines)
            {
                g.setColor (l.getColor ());
                g.drawLine (l.getStartPoint ().x, l.getStartPoint ().y,
                            l.getEndPoint ().x, l.getEndPoint ().y);
            }
        }
    }
    javac LinesTestFrame.java
    poi
    java LinesTestFrame
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    grazie mille ora ho risolto e capito come funziona

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.