Nascondere i bordi di una table

di il
8 risposte

Nascondere i bordi di una table

Salve! Il problema è questo, io vorrei visualizzare una lista di nomi, dato che utilizzo la jtable per farlo, volevo nascondere i bordi della tabella, affinchè sembrasse una semplice lista di nomi. Allora, fino a quando ho usato il metodo setShowGrid(false) andava tutto bene, solo che mi veniva fuori un quadrato bianco (la tabella) e ancora non mi piaceva l'effetto, allora ho applicato un cell renderer, facendo così in modo da far "sparire" il tipico bianco della table, ora però pur nascondendo i bordi al posto di essi (in genere sono neri) appaiono righe bianche, ma neanche sull'intera tabella, un lato è inesistente (che poi è quello che vorrei).
Mi scuso in anticipo per la spiegazione un pò confusa, ma spero qualcuno mi possa capire e aiutare!
Posto i pezzi di codice.

public class TableDisciplineCellRenderer extends JLabel implements TableCellRenderer
{	
	TableDisciplineCellRenderer() {	setOpaque(true); }
	
	public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,boolean hasFocus,int row,int column) 
	{
	    setVerticalAlignment(CENTER);
	    setHorizontalAlignment(CENTER);
	    table.setRowHeight(50);
	    table.setShowGrid(false);
	    if(value != null) 
	    {
	        setText((String) value);
	        setFont(new Font("Calibri", Font.PLAIN , 26));
	        
	    }
		return this;
	}
}
Questo è quello che viene fuori:

Immagine.png
Immagine.png

8 Risposte

  • Re: Nascondere i bordi di una table

    rossociliegia ha scritto:


    allora ho applicato un cell renderer, facendo così in modo da far "sparire" il tipico bianco della table
    Non serve arrivare ai cell renderer solo per cambiare il colore di sfondo.

    La soluzione è un setup "una tantum" all'inizio:

    tuaTabella.setBackground( ...usa un Color... );
    tuaTabella.setIntercellSpacing(new Dimension(0, 0));
    tuaTabella.setShowGrid(false);


    Tutto qui.
  • Re: Nascondere i bordi di una table

    andbin ha scritto:


    tuaTabella.setBackground( ...usa un Color... );
    Ma se non volessi colorarlo, se volessi renderlo semplicemente "trasparente" diciamo, cioè uguale al resto del frame? C'è un modo?
    Comunque perchè diventano bianche? Anche se come dici non serve un render, non dovrebbe fare lo stesso?
  • Re: Nascondere i bordi di una table

    rossociliegia ha scritto:


    se volessi renderlo semplicemente "trasparente" diciamo, cioè uguale al resto del frame?
    A parte il header (che è un altro discorso), per rendere la tabella "trasparente" (che si veda il colore sotto):

    tuaTabella.setBackground(new Color(255, 255, 255, 0)); // alpha 0 = trasparente
    tuaTabella.setOpaque(false);
    tuoScrollPane.setOpaque(false);
    tuoScrollPane.getViewport().setOpaque(false);

    I 3 setOpaque con false sono necessari, tutta la "catena" di contenimento deve essere non-opaca.
  • Re: Nascondere i bordi di una table

    Grandee! Grazie mille, ora è perfetto.

    andbin ha scritto:


    A parte il header (che è un altro discorso)
    Potresti dirmi anche per l'header? Viene metà bordo bianco e metà bordo nero.
  • Re: Nascondere i bordi di una table

    rossociliegia ha scritto:


    Potresti dirmi anche per l'header? Viene metà bordo bianco e metà bordo nero.
    Per il header è un po' di verso e meno facile. Gli header sono fatti con un cell renderer speciale fatto apposta proprio per le intestazioni delle colonne!
  • Re: Nascondere i bordi di una table

    andbin ha scritto:


    Per il header è un po' di verso e meno facile. Gli header sono fatti con un cell renderer speciale fatto apposta proprio per le intestazioni delle colonne!
    Se scrivo così:
    JTableHeader header = namesDisciplina.getTableHeader();
    e poi per esempio voglio cambiargli il font e scrivo:
    header.setFont(new Font("Calibri", Font.BOLD, 18));
    va tranquillamente, ma per il bordo niente.

    Anzi in realtà, ho provato prima con
    header.setBorder(BorderFactory.createEmptyBorder());
    e non andava, perciò ne ho provato un altro a caso, per esempio:
    header.setBorder(BorderFactory.createDashedBorder());
    e niente in pratica va, ma su due lati, gli altri due restano una linea continua nera.
    Poi non riesco proprio a capire perchè due lati sono bianchi e due lati sono neri. Fosse tutto nero forse lo lascerei anche.
  • Re: Nascondere i bordi di una table

    rossociliegia ha scritto:


    va tranquillamente, ma per il bordo niente.
    No infatti. C'entra quel cell renderer speciale per l'header.

    rossociliegia ha scritto:


    Poi non riesco proprio a capire perchè due lati sono bianchi e due lati sono neri.
    Perché è un bordo "raised", dà l'effetto di rialzato (un po' come certi pulsanti). Tutto qui, non c'è nulla da "capire" (se sai come sono i pulsanti "vecchio" stile).
  • Re: Nascondere i bordi di una table

    andbin ha scritto:


    No infatti. C'entra quel cell renderer speciale per l'header.
    Perché è un bordo "raised", dà l'effetto di rialzato (un po' come certi pulsanti). Tutto qui, non c'è nulla da "capire" (se sai come sono i pulsanti "vecchio" stile).
    Vabene, ho capito. Grazie lo stesso del tempo dedicatomi e dell'aiuto.
Devi accedere o registrarti per scrivere nel forum
8 risposte