2016-04-08 4 views
0

Я работаю над программой базы данных на основе цветов, которая показывает заказы внутри размещения по цвету. проблема, с которой я столкнулся, состоит в том, что в таблице есть 367 столбцов (название места размещения, а затем все дни года). Проблема, с которой я столкнулся, заключается в том, что я не могу понять, как сделать первый столбец строки отображают строку, а остальные - цвет.Как сделать строку в JTable с 367 ячейками, где только первый имеет текст, а остальные имеют цвета

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

public class MyRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     if (! table.isRowSelected(row)) 
     { 
      if(row == 2 && column == 2) 
       c.setBackground(new java.awt.Color(0, 0, 255)); 
      else 
       c.setBackground(table.getBackground()); 
     } 
     return c; 
    } 
} 

Как бы интегрировать это с JTable?

PS У меня есть заголовок, который я хочу показать, но для начала строки должны быть пустыми. то при нажатии кнопки она должна добавить строку. это последняя кнопка, я могу сделать сам, я просто нужна помощь с CellRenderer

На данный момент мой JTable инициализируется так: JTable table = new JTable();

Кто-нибудь есть какие-либо советы?

+0

Поместите информацию вы хотите в 'TableModel', обеспечивает обычай' TableCellRenderer' который принимает 'value' и преобразующий до требуемого цвета и устанавливает фон – MadProgrammer

+0

В качестве примера [] (HTTP: // stackoverflow.com/questions/30552644/how-do-i-color-individual-cells-of-a-jtable-based-on-the-value-in-the-cell/30553979#30553979) и [пример] (http : //stackoverflow.com/questions/28082098/how-to-give-a-jtable-cell-different-background-colour/28082202#28082202) – MadProgrammer

ответ

2

Я полагаю, что есть два состояния на день, забронированы или нет. Таким образом, value является логическим. Вы можете настроить рендереры по типам классов. Например:

table.setDefaultRenderer(Boolean.class, new MyRenderer()); 

При том, что ваш рендер будет использует только если value является логическим.

public class MyRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

      if(value) 
       c.setBackground(/*Color for booked days*/); 
      else 
       c.setBackground(table.getBackground()); 

     return c; 
    } 
} 
+0

Будут несколько цветов в зависимости от того, сколько человек забронировано, так что я просто использовал бы вместо int? – BRHSM

+0

Вы можете использовать 'enum' для разных ситуаций. 'public enum RoomState {AVALIABLE, BOOKED, BOOKED2}' – rdonuk

+0

И решите, что цвет в cellrenderer зависит от состояния. – rdonuk