Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    17

    Desktop Application Paint

    Salve a tutti.
    All'interno di un progetto devo implementare un piccolo mini editor, ovvero il famoso paint (semplificato). Ho bisogno quindi che l'utente possa scegliere lo strumento per disegnare: pennello, rettangolo, ovale, gomma; il colore e lo spessore.
    Io ho creato un jPanel con dentro dei jRadioButton (tutti di uno stesso gruppo) per gli strumenti, un ComboBox per la selezione del colore e uno Slider per lo spessore.
    Ho poi creato una nuova classe

    codice:
    import java.awt.*;
    import java.awt.event.*;
    
    
    // Java extension packages
    import javax.swing.*;
    
    public class Painter extends JPanel {
    
    
       private int xValue = -10, yValue = -10;
    
    
    
       public Painter()
       {
          
    
           addMouseMotionListener(
          
          new MouseMotionAdapter() {
    
    
    
             public void mouseDragged( MouseEvent event )
             {
                xValue = event.getX();
                yValue = event.getY();
                
    
                repaint();
             }
          }  ì
    ); ì
    
       setVisible( true );
    }
    public void paintComponent(Graphics g)
    {
            
     
      g.fillOval(xValue, yValue, 5, 5);  // qui al posto dei 5 ci dovrebbe essere lo spessore definito dallo slider
        }
    
    
    }
    L'ho aggiunta quindi agli Swing containers nella tavolozza e posizionata come un normale Panello.
    Sin qua nessun problema, funziona tutto (anche se disegna davvero male, ma pazienza)
    Il mio problema è quello di aggiungere le funzioni dei diversi controlli. Ho pensato a un codice del genere:
    codice:
     
    private int spessore = jSlider1.getValue();
    private Color colore;
    private int c = jComboBox1.getSelectedIndex();
            if (c == 0) {
                
                colore = Color.WHITE;
                         
            }
            else if (c == 1) {
                colore = Color.BLACK;
            }
            else if (c == 2) {
                colore = Color.BLUE;
            }
            else if (c == 3) {
                colore = Color.GREEN;
            }
            else if (c == 4) {
                colore = Color.GRAY;
            }
            else if (c == 5) {
                colore = Color.YELLOW;
            }
            else if (c == 6) {
                colore = Color.PINK;
            }
            else if (c == 7) {
                colore = Color.RED;
            }
            else if (c == 8) {
                colore = Color.CYAN;
            }
    Ma dove lo metto? Probabilmente la mia domanda è proprio stupida, ma sono una principiante, quindi perdonatemi.
    prendiamo per esempio lo slider.
    Ho provato a creare un metodo nella sorgente: quando lo stato dello slider cambia inserisce in una variabile il valore dello slider stesso e ritorna questa variabile. Ho provato quindi a chiamare questo metodo nella classe Painter ma non fa.
    Aiuto!

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

    Re: Desktop Application Paint

    Originariamente inviato da Chiarula
    (anche se disegna davvero male, ma pazienza)
    Se ti riferisci al fatto che la figura è "scalettata", si può migliorare, basta attivare il "antialias".

    Inoltre in paintComponent come prima cosa dovresti invocare la versione "super":
    super.paintComponent(g);

    Ah, e il paintComponent tienilo protected, non public (non serve aprire a questo livello).

    Originariamente inviato da Chiarula
    codice:
     
    private int spessore = jSlider1.getValue();
    private Color colore;
    private int c = jComboBox1.getSelectedIndex();
            if (c == 0) {
                
                colore = Color.WHITE;
                         
            }
            else if (c == 1) {
                colore = Color.BLACK;
            }
            else if (c == 2) {
                colore = Color.BLUE;
            }
            else if (c == 3) {
                colore = Color.GREEN;
            }
            else if (c == 4) {
                colore = Color.GRAY;
            }
            else if (c == 5) {
                colore = Color.YELLOW;
            }
            else if (c == 6) {
                colore = Color.PINK;
            }
            else if (c == 7) {
                colore = Color.RED;
            }
            else if (c == 8) {
                colore = Color.CYAN;
            }
    Io invece ti suggerirei un'altra cosa: le celle di JComboBox possono trattare tecnicamente qualunque tipo di oggetto. Come sono gestiti e poi visualizzati dipende innanzitutto dal "model" usato dal JComboBox e dal "renderer" che si occupa di fornire il componente da "stampare" sulla cella.

    Una idea semplice e "ad oggetti" è mettere nel model oggetti di una tua classe es. ColoreDisegno che contiene 2 cose: una stringa (la descrizione) e il java.awt.Color.
    La stringa la fai restituire dal toString(), per il colore predisponi un apposito metodo "getter".

    Il renderer di "default" di JComboBox fornisce semplicemente un JLabel il cui testo lo ottiene dal toString() sull'oggetto. Il risultato è che nel JComboBox puoi vedere i nomi che definisci (es. "Rosso") ma gli item nel JComboBox sono i tuoi oggetti ColoreDisegno.

    A quel punto quando la selezione cambia (registra un ActionListener sul JComboBox) fai:

    codice:
    ColoreDisegno coloreSelezionato = (ColoreDisegno) coloreCombo.getSelectedItem();
    Color color = coloreSelezionato.getColor();    // Questo getColor lo definisci tu in ColoreDisegno
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.