2012-01-25 22 views
10

Sto cercando di nascondere le linee della griglia di una tabella ma senza risultati. Anche provare a cambiare il colore delle linee della griglia non funziona. Ecco il mio codice:Come nascondere le linee della griglia in JTable

// build the table 
tableView = new JTable(ttm); 
//Specifify the selection Listener and model 
listSelectionModel = tableView.getSelectionModel(); 
listSelectionModel.addListSelectionListener(new SharedListSelectionHandler(tableView)); 
tableView.setSelectionModel(listSelectionModel); 

//Add a mouse listener to our table and implement double click event 
tableView.addMouseListener(new MouseAdapter(){ 

    public void mouseClicked(MouseEvent e){ 

     //If double click in a message show the Message Details window 
     if (e.getClickCount() == 2){ 

      showMessageDetail(); 
      } 
    } 


}); 

// set my own renderer 
CustomCellRenderer mtr = new CustomCellRenderer(); 
tableView.setDefaultRenderer(Object.class, mtr); 
// table properties 
tableView.setGridColor(Color.black); 
tableView.setShowGrid(false); 
//tableView.setShowVerticalLines(false); 
//tableView.setShowHorizontalLines(false); 
tableView.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
//hide header 
tableView.setTableHeader(null); 
// hide the id column 
String columName = tableView.getColumnName(TableModel.COLUMN_ID); 
tableView.getColumn(columName).setMaxWidth(0); 
tableView.getColumn(columName).setMinWidth(0); 
tableView.getColumn(columName).setWidth(0); 
//load the messages in the table 
loadMessages(); 
//adjust column width 
tableView = autoResizeColWidth(tableView, ttm); 


    public class CustomCellRenderer extends JPanel implements TableCellRenderer { 
/** 
* First gradient color 
*/ 
private static final Color COLOR_1 = new Color(255, 255, 255, 200); 
/** 
* Second gradient color 
*/ 
private static final Color COLOR_2 = new Color(255, 0, 255, 200); 
/** 
* Controls gradient direction 
*/ 
private static final float SIDE = 50; 

private GradientPaint gradientPaint = new GradientPaint(0, 0, COLOR_1, SIDE, SIDE, COLOR_2, true); 

private JLabel label = new JLabel(); 

    public CustomCellRenderer() { 
     setOpaque(true); 
     setLayout(new BorderLayout()); 
     add(label, BorderLayout.CENTER); 
     label.setHorizontalAlignment(SwingConstants.CENTER); 
    } 

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     label.setText(value.toString()); 
     return this; 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setPaint(gradientPaint); 
     g2.fillRect(0, 0, getWidth(), getHeight()); 
    } 
    } 

Le linee di griglia bianche vengono sempre disegnate. Sono bloccato qui ...

Devo implementare un Viewport personalizzato per sbarazzarsi di questo?

Grazie in anticipo, Alex

+1

Questo è strano. 'JTable.setShowGrid (false)' funziona per me con un personalizzato 'TableCellRenderer'. Pubblicare un codice più pertinente può essere utile, o meglio ancora, pubblicare un [SSCCE] (http://www.sscce.org). – Jeffrey

+1

'Sto usando un CellRenderer personalizzato, non so davvero se questo potrebbe causare il problema. Beh, è ​​così facile da capire. Prova il tuo codice senza il renderizzatore personalizzato. – camickr

+0

@camickr Ho provato che, non ha funzionato. – AlejandroVK

risposta

32

si devono impostare due thingies

  • griglia disabilitazione mostra
  • nullo riga/colonna spaziatura tra celle

In codice:

table.setShowGrid(false); 
table.setIntercellSpacing(new Dimension(0, 0)); 

Oppure utilizzare JXTable (dal SwingX project), che lo fa per te:

xTable.setShowGrid(false, false); 
+0

Esattamente quello che ho richiesto, grazie Kleopatra, sei una stella! – AlejandroVK

+2

Grazie amico, questa spaziatura intercell mi stava facendo impazzire. Disattiverei le linee della griglia e sembrava che ci fosse una griglia bianca. Ore perse per questo –

1

solo jTable1.setShowHorizontalLines (false); o jTable1.setShowVerticalLines (false); oppure puoi utilizzare l'opzione 2

jTable1.setShowHorizontalLines(false); 

jTable1.setShowVerticalLines(false); 
Problemi correlati