Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Bottoni
Forum - Java - Bottoni

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ht-never (Member)
Rookie


Messaggi: 49
Iscritto: 24/09/2011

Segnala al moderatore
Postato alle 20:06
Mercoledì, 11/04/2012
sto sviluppando un programma e mi piacerebbe creare un bottone personalizzato... solo che se creo un bottone che estende AbstractButton quando ci clicco sopra non succede nulla.
Codice sorgente - presumibilmente Java

  1. package glow;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. @SuppressWarnings("serial")
  5. public class XButton extends AbstractButton
  6. {
  7.   private Color color = Color.white;
  8.   private String string = new String();
  9.   private Dimension dim = new Dimension(30,30);
  10.   private Color borderColor = Color.white;
  11.   Graphics graph;
  12.  
  13.   public XButton(String s, Color c, Color border)
  14.   {
  15.         this.color = c;
  16.         this.string = s;
  17.         this.borderColor = border;
  18.     this.dim = new Dimension(s.length()*9,30);
  19.   }
  20.  
  21.   public XButton(String s)
  22.   {
  23.         this.string = s;
  24.     setPreferredSize(new Dimension(300,200));
  25.   }
  26.   public XButton(Color c)
  27.   {
  28.         this.color = c;
  29.     setPreferredSize(new Dimension(300,200));
  30.   }
  31.   public XButton(Dimension dim,Color c)
  32.   {
  33.         this.color = c;
  34.     setPreferredSize(dim);
  35.   }
  36.  
  37.   public void paintComponent(Graphics g)
  38.   {
  39.     super.paintComponent(g);
  40.     graph = g;
  41.     paintInDeviceCoords(g);
  42.   }
  43.  
  44.   public void paintInDeviceCoords(Graphics g)
  45.   {
  46.     /* assegna modo di riempimento sfumato */
  47.     ((Graphics2D)g).setPaint( new GradientPaint(0,0, Color.magenta,
  48.                               300,200, Color.green) );
  49.     g.setColor(color);
  50.     g.fillRect(0,0,(int)dim.getWidth(),(int)dim.getHeight());
  51.     g.setColor(Color.black);
  52.     g.setFont(new Font(g.getFont().getFontName(),Font.PLAIN,18) );
  53.     g.drawString(string,5,20);
  54.    
  55.     ((Graphics2D)g).setStroke( new BasicStroke(5.0f) );
  56.     g.setColor(borderColor);
  57.     g.drawLine(string.length()*9,0,string.length()*9,27);
  58.     g.drawLine(0,0,0,27);
  59.     g.drawLine(0,0,string.length()*9,0);
  60.     g.drawLine(string.length()*9,28,0,28);
  61.     g.drawLine(0,0,0,28);
  62.   }
  63.  
  64.   public static void main(String[] args)
  65.   {
  66.     XButton ed = new XButton("Hello!",Color.gray,Color.red);
  67.     System.out.println("ciao");
  68.     ed.addActionListener(new Action());
  69.     XFrame fr = new XFrame();
  70.     fr.setLayout(null);
  71.     fr.setBounds(300,300,300,300);
  72.     ed.setBounds(100,100,300,300);
  73.     fr.add(ed);
  74.     fr.setVisible(true);
  75.   }
  76.  
  77. };


PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 20:24
Mercoledì, 11/04/2012
premetto di essere molto molto molto inesperto in ambito java.. ma guardando il codice mi viene un dubbio...

sinceramente non vedo nessun metodo che si occupa di gestire il click del pulsante qualcosa tipo OnClick.. sicuro che non manchi?

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 22:05
Mercoledì, 11/04/2012
è una classe astratta... non si può fare un istanza di una classe astratta...
non potresti semplicemente estendere la classe JButton ?!?!
GrG ha ragione non vedo nessun metodo che gestisce l'evento click?!
a meno che non sia scritto nella classe Action (riga 68)

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:22
Giovedì, 12/04/2012
Scrivi il codice dell'ActionListener.

PM Quote
Avatar
ht-never (Member)
Rookie


Messaggi: 49
Iscritto: 24/09/2011

Segnala al moderatore
Postato alle 12:55
Giovedì, 12/04/2012
@bonny ma io non ho fatto l'istanza di una classe astratta, ma di una classe che la estende e che ne sviluppa tutti i metodi, giusto?

@It Totem non ho scritto il codice dell'ActionListener perchè non mi sembrava rilevante, il problema è eseguirlo questo listener... comunque è contenuto nel file Action.java, che è...

Codice sorgente - presumibilmente Java

  1. package glow;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4.  
  5. public class Action implements ActionListener {
  6.         public void actionPerformed(ActionEvent e) {
  7.                 System.out.println("prova 1,2,3...");
  8.         }      
  9. }


PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 13:55
Giovedì, 12/04/2012
per curiosità prova a scrivere nel main
Codice sorgente - presumibilmente Plain Text

  1. eb.requestFocusInWindow();


PM Quote
Avatar
ht-never (Member)
Rookie


Messaggi: 49
Iscritto: 24/09/2011

Segnala al moderatore
Postato alle 14:05
Giovedì, 12/04/2012
Non funziona... semplicemente non vuole comportarsi come un bottone... se faccio extends JButton la situazione degenera, mentre se estendo AbstractButton non è un bottone...

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:54
Giovedì, 12/04/2012
cosi funziona cmq il metodo paintInDeviceCoords(Graphics g) è inutile basta scrivere quel codice dentro paintComponent()

Codice sorgente - presumibilmente Java

  1. import javax.swing.*;
  2. import java.awt.*;
  3.  
  4.  
  5. public class XButton extends JButton{
  6.  
  7.     private Color color = Color.white;
  8.     private String string = new String();
  9.     private Dimension dim = new Dimension(30, 30);
  10.     private Color borderColor = Color.white;
  11.     Graphics graph;
  12.  
  13.     public XButton(String s, Color c, Color border) {
  14.         this.color = c;
  15.         this.string = s;
  16.         this.borderColor = border;
  17.         this.dim = new Dimension(64, 30);// 64 = 9 * s.lenght
  18.         this.setPreferredSize(this.dim);
  19.     }
  20.  
  21.     public XButton(String s) {
  22.         this.string = s;
  23.         //setPreferredSize(new Dimension(300, 200));
  24.     }
  25.  
  26.     public XButton(Color c) {
  27.         this.color = c;
  28.         //setPreferredSize(new Dimension(300, 200));
  29.     }
  30.  
  31.     public XButton(Dimension dim, Color c) {
  32.         this.color = c;
  33.         //setPreferredSize(dim);
  34.     }
  35.  
  36.     @Override
  37.     public void paintComponent(Graphics g) {
  38.         super.paintComponent(g);
  39.         graph = g;
  40.         paintInDeviceCoords(g);
  41.     }
  42.  
  43.     public void paintInDeviceCoords(Graphics g) {
  44.         /*
  45.          * assegna modo di riempimento sfumato
  46.          */
  47.         ((Graphics2D) g).setPaint(new GradientPaint(0, 0, Color.magenta,
  48.                 300, 200, Color.green));
  49.         g.setColor(color);
  50.         g.fillRect(0, 0, (int) dim.getWidth(), (int) dim.getHeight());
  51.         g.setColor(Color.black);
  52.         g.setFont(new Font(g.getFont().getFontName(), Font.PLAIN, 18));
  53.         g.drawString(string, 5, 20);
  54.  
  55.         ((Graphics2D) g).setStroke(new BasicStroke(5.0f));
  56.         g.setColor(borderColor);
  57.         g.drawLine(string.length() * 9, 0, string.length() * 9, 27);
  58.         g.drawLine(0, 0, 0, 27);
  59.         g.drawLine(0, 0, string.length() * 9, 0);
  60.         g.drawLine(string.length() * 9, 28, 0, 28);
  61.         g.drawLine(0, 0, 0, 28);
  62.     }
  63.  
  64.  
  65.     public static void main(String[] args) {
  66.         XButton ed = new XButton("Hello!", Color.gray, Color.red);
  67.         //System.out.println("ciao");
  68.         Action ac = new Action();
  69.         ed.addActionListener(ac);
  70.         JFrame fr = new JFrame();
  71.         //fr.setLayout(null);
  72.         fr.setBounds(300, 300, 300, 300);
  73.         //ed.setBounds(100, 100, 100, 100);
  74.         JPanel p = new JPanel();
  75.         p.setLayout(new FlowLayout());
  76.         p.add(ed);
  77.         fr.getContentPane().add("Center",p);
  78.         fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  79.         fr.setVisible(true);
  80.     }
  81.  
  82. }



la classe Action lo lasciata com'era

PM Quote
Avatar
ht-never (Member)
Rookie


Messaggi: 49
Iscritto: 24/09/2011

Segnala al moderatore
Postato alle 16:30
Giovedì, 12/04/2012
Grazie!

solo che adesso per farlo funzionare devo prima creare un JPanel, c'è un modo per saltare il passaggio?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo