2012-01-25 16 views
10

Próbuję ukryć linie siatki JTable, ale bez wyników. Nawet próba zmiany koloru linii siatki nie działa. Oto mój kod:Jak ukryć linie siatki w 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()); 
    } 
    } 

Białe linie siatki są zawsze rysowane. Utknąłem tutaj ...

Czy muszę wprowadzić niestandardowy widok, aby się tego pozbyć?

Dzięki z góry, Alex

+1

To dziwne. 'JTable.setShowGrid (false)' działa dla mnie z niestandardowym 'TableCellRenderer'. Zamieszczanie bardziej odpowiedniego kodu może być korzystne, a jeszcze lepiej, po [SSCCE] (http://www.sscce.org). – Jeffrey

+1

'Używam niestandardowego CellRenderer, naprawdę nie wiem, czy to może być przyczyną problemu." Cóż, to dość łatwe do wymyślenia. Wypróbuj swój kod bez niestandardowego mechanizmu renderowania. – camickr

+0

@camickr Próbowałem tego, nie wyszło. – AlejandroVK

Odpowiedz

32

trzeba ustawić dwa thingies

  • wyłączanie siatki pokazujący
  • zerowy wiersz/kolumna odstępy międzykomórkowej

W kodzie:

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

Albo użyć JXTable (od SwingX project), który zrobi to za Ciebie:

xTable.setShowGrid(false, false); 
+0

Dokładnie to, co otrzymałem, dzięki Kleopatra, jesteś gwiazdą! – AlejandroVK

+2

Dzięki człowieku, ten odstęp między komórkami doprowadzał mnie do szaleństwa. Wyłączałem linie siatki i wyglądało to jak biała siatka. Straciłem do tego godziny. –

1

zaledwie jTable1.setShowHorizontalLines (false); lub jTable1.setShowVerticalLines (false); lub możesz użyć opcji 2:

jTable1.setShowHorizontalLines(false); 

jTable1.setShowVerticalLines(false); 
Powiązane problemy