Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    L'operazione di ridisegno sembra "lenta"

    Salve a tutti, sto cercando di migliorare l'interfaccia della mia applicazione creando una cosiddetta "Unified ToolBar", come una vera applicazione nativa per Mac OS X. Il codice che ho postato qui sotto fa esattamente questo:



    C'è un problema però: quando il JFrame perde/guadagna il focus la toolbar "lampeggia", nel senso che si vede che il pannello viene ridisegnato. La cosa diventa molto fastidiosa se sul pannello ci sono altri componenti (pulsanti, etichette ecc): in questo caso infatti l'operazione di ridisegno è ancora più marcata.

    C'è modo di evitare che il ridisegno si noti così tanto? Come posso "accelerare" l'operazione?
    Grazie

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class UnifiedToolBarWindow extends JFrame {
        private UnifiedToolBar toolBar;
        private JPanel mainArea;
    
        public UnifiedToolBarWindow() {
            getRootPane().putClientProperty("apple.awt.brushMetalLook", Boolean.TRUE);
    
            setPreferredSize(new Dimension(950, 400));
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            toolBar = new UnifiedToolBar();
            toolBar.setPreferredSize(new Dimension(getWidth(), 55));
            toolBar.setBorder(new MatteBorder(0, 0, 1, 0, Color.DARK_GRAY));
            
            addWindowFocusListener(new WindowFocusListener() {
                public void windowLostFocus(WindowEvent we) {
                    toolBar.setFocusValue(false);
                }
            
                public void windowGainedFocus(WindowEvent we) {
                    toolBar.setFocusValue(true);
                }
            });
    
            mainArea= new JPanel();
            mainArea.setBackground(new Color(216, 216, 216));
    
            setLayout(new BorderLayout());
            add(toolBar, BorderLayout.NORTH);
            add(mainArea, BorderLayout.CENTER);
    
            pack();
    
            setLocationRelativeTo(null);
        }
    
        public static void main(String[] args) {
            new UnifiedToolBarWindow().setVisible(true);
        }
    }
    
    interface Focusable {
        public void setFocusValue(boolean isFocused);
    }
    
    class UnifiedToolBar extends JPanel implements Focusable {
        private volatile boolean isFocused = true;
    
        public UnifiedToolBar() {
            setPreferredSize(new Dimension(getWidth(), 55));
        }
    
        public void setFocusValue(boolean isFocused) {
            this.isFocused = isFocused; 
            repaint();
            validate();
        }
    
        @Override
        public void paintComponent(Graphics g) {        
            Graphics2D g2d = (Graphics2D)g;
        
            if (isFocused) {
                GradientPaint gradient = new GradientPaint(0, 0, new Color(188, 188, 188),
                                                           0, 55, new Color(155, 155, 155));
                g2d.setPaint(gradient);
            } else {
                g2d.setColor(new Color(229, 229, 221));
            }
            
            g2d.fillRect(0, 0, getWidth(), getHeight());
        }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Per me, se vedi questo "lampeggio" vuol dire che Java sta continuando a disegnare lo stesso pannello più volte e le operazioni diverranno "lente".
    Prova a togliere il repaint(), fammi sapere!

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Grazie per la risposta ma forse mi sono spiegato male: non è che lampeggia e continua a lampeggiare!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Forse nemmeno io mi sono spiegato bene: prova a togliere il repaint()

  5. #5
    Comunque, proviamo davvero a togliere il repaint(): forse l'applicazione si auto-aggiorna da solo, senza questo metodo. Io mi ricordo di simili problemi...

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Avevo già provato a toglierlo, è anche peggio! Grazie lo stesso
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Ok, mi prendo il codice oggi pomeriggio e gli do' una occhiata

  8. #8
    Ciao, ho controllato un po' di cosette... Ti dò questo link: http://alessandro-cocco.blogspot.com...a-in-java.html
    Potresti chiedere a lui, essendo un po' scarno di Java in ambiente Mac

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Power Dragon
    Ciao, ho controllato un po' di cosette... Ti dò questo link: http://alessandro-cocco.blogspot.com...a-in-java.html
    Potresti chiedere a lui, essendo un po' scarno di Java in ambiente Mac
    Ehm... "lui" sono io

    Se guardi nel codice che ho postato qui noterai che quella proprietà la uso. Quello che cerco di fare è evitare il flickering della toolbar quando l'applicazione perde/prende il focus.

    Java ad Apple non piace, c'è poco da dire... E per ottenere un'interfaccia gradevole con Java su mac ci si deve perdere un po' di tempo, per questo a volte bisogna lavorare "dietro le quinte". Grazie comunque per l'interessamento
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Una cosa è da dire: il Mac è bellissimo!!!!!
    Ma sai: "chi bello vuol apparire, un poco deve soffrire!": è una battuta!
    In bocca al lupo!

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.