Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    [Java] JTable con sfondo a gradiente

    Rieccomi qui con i miei problemi.
    Sto cercando di "abbellire" la GUI con degli sfondi a gradiente.
    Son riuscito a metterli per le JLabel, le JComboBox, le JList, i JPanel ecc...
    Ma alle JTable proprio non riesco.
    Ho provato a derivare JTable in una mia classe e imposta il paintComponent come per gli altri, a metterla non opaca, a fare l'override di prepareRenderer, ma nulla. Celle bianche e sfondo grigio.

    Sapete come fare?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Dai un'occhiata qui
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da Alex'87
    Dai un'occhiata qui
    Avevo dato un'occhiata ma non avevo cavato un ragno dal buco

    Però credo di aver risolto con questo codice:

    codice:
    private class MyTable extends JTable {
    
            public MyTable(Object[][] rowData, Object[] columnNames) {
                super(rowData, columnNames);
            }
    
            @Override
            public Component prepareRenderer(TableCellRenderer ren, int row, int col) {
                Component c = super.prepareRenderer(ren, row, col);
                ((JComponent) c).setOpaque(isCellSelected(row, col));
                return c;
            }
    
            @Override
            public Component prepareEditor(TableCellEditor ed, int row, int col) {
                Component c = super.prepareEditor(ed, row, col);
                ((JComponent) c).setOpaque(isCellSelected(row, col));
                // Se è un JTextComponent, seleziono tutto il contenuto
                if (c instanceof JTextComponent) {
                    JTextComponent t = (JTextComponent) c;
                    t.selectAll();
                }
                return c;
            }
    
            @Override
            public boolean getScrollableTracksViewportHeight() {
                return true;
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                RadialGradientPaint gradient = getRadialGradientPaintMin(this.getWidth(), this.getHeight());
                g2.setPaint(gradient);
                g2.fillRect(0, 0, this.getWidth(), this.getHeight());
                this.setOpaque(false);
                super.paintComponent(g);
                this.setOpaque(true);
            }
        }
    
        private class MySC extends JScrollPane {
    
            public MySC() {
            }
    
            public MySC(Component view) {
                super(view);
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                RadialGradientPaint gradient = getRadialGradientPaintMin(this.getWidth(), this.getHeight());
                g2.setPaint(gradient);
                g2.fillRect(0, 0, this.getWidth(), this.getHeight());
                this.setOpaque(false);
                super.paintComponent(g);
                this.setOpaque(true);
            }
        }
    
        public static RadialGradientPaint getRadialGradientPaintMin(int w, int h) {
            Color c1 = new Color(150, 150, 150);
            Color c2 = new Color(224, 224, 224);
            Point2D centro = new Point2D.Float((float) (w / 2.0), (float) (h / 2.0));
            float raggio = Math.min((float) (w / 2.0), (float) (h / 2.0));
            float[] dist = {0.0f, 0.5f, 1.0f};
            Point2D focus = new Point2D.Float((float) (w / 2.0 * 0.45), (float) (h / 2.0 * 0.45));
            Color[] colori = {c1, c2, c1};
            RadialGradientPaint p = new RadialGradientPaint(centro, raggio, focus, dist, colori, CycleMethod.REFLECT);
            return p;
        }
    Poi di fa un JPanel, con dentro un MySC con dentro MyTable.
    L'effetto è psichedelico, ma a me garba di molto
    E poi basta giocare con i parametri del gradiente per ottere altri effetti.

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.