2017-02-11 4 views
0

Я пытаюсь изменить цвет некоторых ячеек в своем JTable. Я попытался переопределить getTableCellRendererComponent в простом примере, и он работает хорошо. Но когда я делаю то же самое в моем проекте ничего не меняется ...изменить цвет JTable ячейки с getTableCellRendererComponent НИЧЕГО ПРОСМОТРА

У меня есть JPanel с моей JTable в коробке, как это:

boxTable=Box.createHorizontalBox(); 
box2Table.add(boxTable); 

//JTable      
tablaContador = new JTable(datosContador,cabeceraContador); 

//MODIF COLOR 
tablaContador.setDefaultRenderer(Object.class, new ColorRenderer()); 

Выполнение:

System.out.println(tablaContador.getColumnClass(3)); 

я могу знать что первый параметр setDefaultRenderer - Object.class Я не знаю, есть ли проблема здесь ... У меня есть только строки в таблице, но я попробовал String.class и ничего не происходит

Тогда я изменить некоторые вещи в ячейках для JTable:

tablaContador.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
boxTable.add(tablaContador); 


//Align cells 
for (int i=0; i<cabeceraContador.length;i++){ 
tablaContador.getColumnModel().getColumn(i).setCellRenderer(alinearCeldas); 
       } 

//Modify cells' width 
tablaContador.getColumnModel().getColumn(0).setMinWidth(150); 
for (int i=1; i<cabeceraContador.length;i++){ 
    tablaContador.getColumnModel().getColumn(i).setMaxWidth(40); 
} 

//Scroll for the Table 
scrollContador=new JScrollPane(tablaContador,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 

scrollContador.setPreferredSize(new Dimension(1000,80)); 
scrollContador.setMinimumSize(new Dimension(1000,80)); 
scrollContador.setMaximumSize(new Dimension(2000,80)); 

//Add scroll to the box   
box2Table.add(scrollContador); 

И мой класс ColorRenderer является:

public class ColorRenderer extends DefaultTableCellRenderer{ 

    private Component c; 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) { 

     c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 


     c.setBackground(Color.BLUE);    


     return c; 
    } 


} 

Table result

Так это не работает в моем проекте я не знаю, почему

любая идея?

thaks!

+1

Для лучшей помощи, пожалуйста, серьезно рассмотреть вопрос создания и размещения в вашем вопросе действительный [mcve]/[SSCCE] (http://sscce.org). Это действительно имеет огромное значение, позволяя нам полностью понять ваш код и ваш вопрос. –

+0

Этот вопрос был первоначально закрыт как дубликат: http://stackoverflow.com/questions/18253881/custom-tablecellrenderer-treetablecellrenderer-doesnt-render-table-cells. Я не верю, что это дубликат, поскольку этот рендерер «расширяет» DefaultTableCellRenderer (который непрозрачен), в то время как другой вопрос «реализует» TableCellRenderer, и в этом случае вам нужно беспокоиться о том, чтобы сделать ярлык непрозрачным. – camickr

+1

@HovercraftFullOfEels, 'Вы делаете свой собственный рендерер непрозрачным ... по умолчанию не является, - DefaultTableCellRenderer по умолчанию непрозрачен. – camickr

ответ

2

Я вижу:

tablaContador.setDefaultRenderer(Object.class, new ColorRenderer()); 

, а затем я вижу:

for (int i=0; i<cabeceraContador.length;i++) 
{ 
    tablaContador.getColumnModel().getColumn(i).setCellRenderer(alinearCeldas); 
} 

Назначение визуализатора для определенного столбца имеет приоритет над установкой визуализации по умолчанию, чтобы цвет визуализатор никогда не используется.

Не совсем то, что вы пытаетесь сделать, но я думаю, вам нужно добавить логику цветопередачи в средство рендеринга выравнивания. Другими словами, вся логика рендеринга должна содержаться в одном рендерере. Вы не можете объединить несколько рендерингов.

Вот простой пример пользовательского визуализатора:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableRenderer extends JPanel 
{ 
    public TableRenderer() 
    { 
     String[] columnNames = {"String", "Integer"}; 
     Object[][] data = 
     { 
      {"A", new Integer(1)}, 
      {"B", new Integer(2)}, 
      {"C", new Integer(10)}, 
      {"D", new Integer(4)} 
     }; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 

     // Override default renderer on a specific column 

     TableCellRenderer colorRenderer = new ColorRenderer(); 
     table.getColumnModel().getColumn(1).setCellRenderer(colorRenderer); 
    } 

    /* 
    ** Color the focused cell 
    */ 
    class ColorRenderer extends DefaultTableCellRenderer 
    { 
     public ColorRenderer() 
     { 
      super(); 
      setHorizontalAlignment(JLabel.RIGHT); 
     } 

     @Override 
     public Component getTableCellRendererComponent(
      JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
     { 
      super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

      if (isSelected) 
       setBackground(table.getSelectionBackground()); 
      else 
      { 
       setBackground(null); 

       try 
       { 
        int number = Integer.parseInt(value.toString()); 

        if (number > 9) 
         setBackground(Color.RED); 
       } 
       catch(Exception e) {} 
      } 

      return this; 
     } 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("Color Renderer"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new TableRenderer()); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(() -> createAndShowGUI()); 
/* 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
*/ 
    } 
} 
+0

Спасибо, мой друг! вот в чем смысл ...теперь исправлено – pctripsesp

Смежные вопросы