2012-01-25 25 views
10

Estoy tratando de ocultar las líneas de cuadrícula de una JTable pero sin resultados. Incluso intentar cambiar el color de las líneas de la cuadrícula no funciona. Aquí está mi código:Cómo ocultar líneas de cuadrícula en 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()); 
    } 
    } 

Las líneas de cuadrícula blancas siempre se están dibujando. Estoy atascado aquí ...

¿Debo implementar una ventana gráfica personalizada para deshacerme de esto?

Gracias de antemano, Alex

+1

Eso es extraño. 'JTable.setShowGrid (false)' funciona para mí con un 'TableCellRenderer' personalizado. Publicar un código más relevante puede ser beneficioso, o mejor aún, publicar un [SSCCE] (http://www.sscce.org). – Jeffrey

+1

'Estoy usando un CellRenderer personalizado, no sé si esto podría estar causando el problema. Bueno, eso es bastante fácil de entender. Pruebe su código sin el renderizador personalizado. – camickr

+0

@camickr Intenté eso, no funcionó. – AlejandroVK

Respuesta

32

que tienen que establecer dos cositas

  • rejilla desactivar mostrar fila
  • cero/columna intercelular separación

En código:

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

O utilice JXTable (del SwingX project), que lo hace por usted:

xTable.setShowGrid(false, false); 
+0

Exactamente lo que necesitaba, gracias Kleopatra, eres una estrella! – AlejandroVK

+2

Gracias, hombre, este espaciamiento intercelular me estaba volviendo loco. Deshabilitaba las líneas de la cuadrícula, y parecía que había una rejilla blanca allí. Horas perdidas para esto –

1

sólo jTable1.setShowHorizontalLines (false); o jTable1.setShowVerticalLines (falso); o puede usar la opción 2

jTable1.setShowHorizontalLines(false); 

jTable1.setShowVerticalLines(false); 
Cuestiones relacionadas