Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Josten
    Registrato dal
    Jan 2011
    Messaggi
    25

    Jbutton con forme irregolari

    Jbutton con forme irregolari
    Ciao a tutti!

    sto creando un app in java (ovviamente..) e necessito di un metodo che mi permetta di "disegnare" un bottone personalizzato cliccabile..

    attualmente ho un jbutton con una ImageIcon, e utilizzo questi metodi per non visualizzare i pixel trasparenti

    codice:
     
     bottone[9].setBorderPainted(false);
     bottone[9].setIcon(img);
      //bottone[9].setBorder(null);  
      //bottone[9].setBorderPainted(false);  
      bottone[9].setContentAreaFilled(false);
    l'effetto è perfetto a parte il fatto che anche dove non ho l'immagine (che è un disegno con bordi irregolari) se faccio click in uno degli spazi "vuoti" è come se cliccassi sul bottone.

    ho visto che si può ridefinire un JButton e specificare un bordo (es. i RoundButton) così da renderlo non clickabile ma non ho capito se ciò vale anche per le immagini che non sono dei cerchi ...

    mi potete aiutare ? :P

    grazzzie a tutttiiii

  2. #2
    Spero che funzioni...

    codice:
    button.setOpaque(false);
    button.setFocusPainted(false);
    button.setBorderPainted(false);
    button.setContentAreaFilled(false);
    setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
    I JAVA & LINUX

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    La prossima volta, se ti accorgi di aver sbagliato sezione, non aprire una nuova discussione identica nella sezione corretta: così facendo fai cross-posting (apertura multipla di discussione in forum diversi), contravvenendo al regolamento.
    Piuttosto, utilizza la funzione "segnala ad un moderatore", posta in basso a destra su tutti i post e chiedi/attendi lo spostamento.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di Josten
    Registrato dal
    Jan 2011
    Messaggi
    25
    niente.. non funziona... cavolo... è una settimana ce cerco in internet e ho trovato solo sti bottoni rotondi

    codice:
    class RoundButton extends JButton {
      public RoundButton() {
        this(null, null);
      }
      public RoundButton(Icon icon) {
        this(null, icon);
      }
      public RoundButton(String text) {
        this(text, null);
      }
      public RoundButton(Action a) {
        this();
        setAction(a);
      }
      public RoundButton(String text, Icon icon) {
        setModel(new DefaultButtonModel());
        init(text, icon);
        if(icon==null) {
          return;
        }
        setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
        setBackground(Color.BLACK);
        setContentAreaFilled(false);
        setFocusPainted(false);
        //setVerticalAlignment(SwingConstants.TOP);
        setAlignmentY(Component.TOP_ALIGNMENT);
        initShape();
      }
      protected Shape shape, base;
      protected void initShape() {
        if(!getBounds().equals(base)) {
          Dimension s = getPreferredSize();
          base = getBounds();
          shape = new Ellipse2D.Float(0, 0, s.width-1, s.height-1);
        }
      }
      @Override public Dimension getPreferredSize() {
        Icon icon = getIcon();
        Insets i = getInsets();
        int iw = Math.max(icon.getIconWidth(), icon.getIconHeight());
        return new Dimension(iw+i.right+i.left, iw+i.top+i.bottom);
      }
      @Override protected void paintBorder(Graphics g) {
        initShape();
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor(getBackground());
        //g2.setStroke(new BasicStroke(1.0f));
        g2.draw(shape);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_OFF);
      }
      @Override public boolean contains(int x, int y) {
        initShape();
        return shape.contains(x, y);
        //or return super.contains(x, y) && ((image.getRGB(x, y) >> 24) & 0xff) > 0;
      }
    }
    qui l'esempio funzionante

    Esempio roundButton

    per chi è più esperto potrebbe capire se questo su una stella o una qualsiasi altra forma potrebbe funzionare?



    ps scusate per il doppio topic... credevo fosse più facile cancellare una discussione che spostarne una :P

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.