Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361

    Personalizzare JScrollBar

    Salve a tutti, riprendo un tema discusso in altri forum per chiedere consiglio su come personalizzare al meglio una JScrollBar di una JTextArea, nello specifico ho cercato di renderla simile alla scrollBar presente in Windows 7 (frecce) con thumb simile a quello di Windows 8.

    Sono riuscito a creare due scrollBar come nella seguente immagine:

    EsempioScrollBar.png

    Ecco il codice utilizzato (preciso che ho in gran parte utilizzato e adattato alle mie esigenze pezzi di codice trovati online):

    classe principale:

    codice:
    import java.awt.*;
    import javax.swing.*;
    public class TestScrollBar
    {
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run(){
                    try{
                        new TestScrollBar();
                    }
                    catch(Exception e){}
                }
            });
        }
        public TestScrollBar()
        {
    JFrame f=new JFrame("Test ScrollBar"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JTextArea textArea=new JTextArea(20,20); JScrollPane scroll=new JScrollPane(textArea); scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    JScrollBar vsb=scroll.getVerticalScrollBar();
    JScrollBar hsb=scroll.getHorizontalScrollBar(); vsb.setUI(new ScrollBar()); hsb.setUI(new ScrollBar()); f.getContentPane().add(scroll,BorderLayout.CENTER);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
    } }

    classe per la scrollbar:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import javax.swing.plaf.basic.BasicScrollBarUI;
    import javax.swing.*;
    public class ScrollBar extends BasicScrollBarUI
    {
        Image imageThumb,imageTrack;
        JButton decreaseButton,increaseButton;
        public ScrollBar()
        {
            imageThumb=createImage(16,16,new Color(192,192,192));
            imageTrack=createImage(16,16,new Color(240,240,240));
        }
        protected void paintThumb(Graphics g, JComponent c, Rectangle r)
        {
            ((Graphics2D)g).drawImage(imageThumb,r.x,r.y,r.width,r.height,null);
        }
        protected void paintTrack(Graphics g, JComponent c, Rectangle r)
        {
            ((Graphics2D)g).drawImage(imageTrack,r.x,r.y,r.width,r.height,null);
        }
        protected JButton createDecreaseButton(int orientation)
        {
            if(orientation==NORTH)return createButton("NorthArrow.png",m);
            else return createButton("WestArrow.png",m);        
        }    
        protected JButton createIncreaseButton(int orientation)
        {
            if(orientation==SOUTH)return createButton("SouthArrow.png",m);
            else return createButton("EastArrow.png",m);
        }    
        public static JButton createButton(String src,MouseListener m)
        {
            JButton b=new JButton(new ImageIcon(ClassLoader.getSystemResource(src)));
            b.setPreferredSize(new Dimension(15,15));
            b.setMargin(new Insets(0,0,0,0));
            b.setBorder(BorderFactory.createLineBorder(new Color(240,240,240),1));
            b.setOpaque(false);
            b.addMouseListener(m);
            return b;
        }
        static Image createImage(int w,int h,Color c)
        {
            BufferedImage b=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d=b.createGraphics();
            g2d.setPaint(c);
            g2d.fillRect(0,0,w,h);
            g2d.dispose();
            return b;
        }    
        MouseListener m=new MouseListener()
        {
            public void mousePressed(MouseEvent e)
            {
                ((JButton)e.getComponent()).setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
            }
            public void mouseReleased(MouseEvent e)
            {
                ((JButton)e.getComponent()).setBorder(BorderFactory.createLineBorder(new Color(240,240,240),1));
            }
            public void mouseClicked(MouseEvent e){}
            public void mouseEntered(MouseEvent e){}
            public void mouseExited(MouseEvent e){}
        };
    }


    Intanto vorrei sapere se quanto utilizzato può andare bene (sembra funzionare ma data la mia poca esperienza potrebbero esserci cose scorrette).

    Vorrei poi sapere se avete idea di come si potrebbe modificare l'aspetto della parte interna della barra (thumb) quando viene trascinata.

    Grazie

    PS: allego in questo messaggio e nel prossimo (mi permette di inserire solo 3 allegati per messaggio) le frecce utilizzate

    WestArrow.pngEastArrow.png

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ecco le altre due immagini NorthArrow.pngSouthArrow.png

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.