2016-02-06 1 views
1

У меня есть таблица визуализатор, который делает строку в моей таблице красного цвета в зависимости от содержимого колонки 11. Это отлично работает и код ниже:Таблица визуализатора, где есть 2, если заявления

tableR = new JTable(modelR) 
{ 
@Override 
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
Component c = super.prepareRenderer(renderer, row, column); 


Font myFont = new Font("Arial",Font.PLAIN,10); 
Font myFont1 = new Font("Arial", Font.BOLD,10); 
int rowModelId = convertRowIndexToModel(row); 


if (!isRowSelected(row)) { 
        if (tableR.getColumnCount() >= 0) { 
        String type = (String) getModel().getValueAt(rowModelId, 11); 
         c.setBackground("0.0".equals(type) ? Color.RED : Color.WHITE); 
         c.setForeground("0.0".equals(type) ? Color.WHITE : Color.BLACK); 
         c.setFont("0.0".equals(type) ? myFont1: myFont); 

        } 

} 

return c; 

} 

я теперь хотите дополнительно реализовать то же самое со столбцом 12, так что, если критерий выполняется, в этом случае «u» эта конкретная строка будет желтой. Моя попытка ниже, но теперь в таблице ничего не отображается. В дополнение к этому, что произойдет, если столбец 11 и столбец 12 будут окрашены - что произойдет в этом сценарии?

Вот моя попытка идти:

tableR = new JTable(modelR) 
{ 
@Override 
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
Component c = super.prepareRenderer(renderer, row, column); 


Font myFont = new Font("Arial",Font.PLAIN,10); 
Font myFont1 = new Font("Arial", Font.BOLD,10); 
int rowModelId = convertRowIndexToModel(row); 
int rowModelId1 = convertRowIndexToModel(row); 

if (!isRowSelected(row)) { 
        if (tableR.getColumnCount() >= 0) { 
           String type = (String) getModel().getValueAt(rowModelId, 11); 
         c.setBackground("0.0".equals(type) ? Color.RED : Color.WHITE); 
         c.setForeground("0.0".equals(type) ? Color.WHITE : Color.BLACK); 
         c.setFont("0.0".equals(type) ? myFont1: myFont); 

        } 
         if (tableR.getColumnCount() >= 0) { 
           String type = (String) getModel().getValueAt(rowModelId1, 12); 
         c.setBackground("u".equals(type) ? Color.YELLOW : Color.WHITE); 
         c.setForeground("u".equals(type) ? Color.WHITE : Color.BLACK); 
         c.setFont("u".equals(type) ? myFont1: myFont); 

        } 


} 


return c; 

} 
+0

Почему на первом примере кода вы имеете в и г, в то время как на второй у вас есть только c? Кроме того, rowModelId и rowModelId1 будут иметь такое же значение, чтобы c сменила ту же строку. – Infested

+0

@ Infested я удалил это сейчас, это было частью моего эксперимента, чтобы попытаться заставить его работать, думая, что если я создам еще один обработчик рендеринга с именем d, а затем верну как c, так и d, я верну оба рендерера. Я удалил его из вопроса сейчас, спасибо за указание, что вне – Ingram

+0

как вы хотите, чтобы столбцы были нарисованы? когда выбран ряд или когда выбран столбец? или вы хотите нарисовать столбцы, которые не выбраны или что-то еще? – Infested

ответ

1
tableR = new JTable(modelR) { 
    @Override 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
     Component c = super.prepareRenderer(renderer, row, column); 
     Font myFont = new Font("Arial",Font.PLAIN,10); 
     Font myFont1 = new Font("Arial", Font.BOLD,10); 
     int rowModelId = convertRowIndexToModel(row); 
     int rowModelId1 = convertRowIndexToModel(row); 
    if (!isRowSelected(row)) { 
     if (tableR.getColumnCount() >= 0) { 
      String type = (String) getModel().getValueAt(rowModelId1, 12); 
      if("u".equals(type)) { 
       c.setBackground(Color.YELLOW); 
       c.setForeground(Color.WHITE); 
       c.setFont(myFont1); 
       return c; 
      } 
      type = (String) getModel().getValueAt(rowModelId, 11); 
      if("0.0".equals(type)) { 
       c.setBackground(Color.RED); 
       c.setForeground(Color.WHITE); 
       c.setFont(myFont1); 
       return c; 
      } 
     } 
     c.setBackground(Color.WHITE); 
     c.setForeground(Color.BLACK); 
     c.setFont(myFont); 
    } 
    return c; 
} 
} 

здесь вы идете, я надеюсь, что это решает его

+0

@ Infested Я поеду и вернусь к вам .. – Ingram

+0

youre welcome :) thx – Infested

1

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

Примечание:

  • Используется JTable.getValueAt вместо использования TableModel.getValueAt
  • Используется JTable.convertColumnIndexToView, так как я полагаю, на колонке 11 & 12 вы имеете в виду те из модели, а не вид (& индекс модели будет меняться при перемещении вокруг столбцов в представлении)

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

public class example { 
    static Font myFont = new Font("Arial",Font.PLAIN,10); 
    static Font myFont1 = new Font("Arial", Font.BOLD,10); 
    private static Component createTable() { 
     Object rowData[][] = new Object[][]{ 
      {"0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"}, 
      {"b","6.70","q","l","b","6.70","q","l","b","6.70","q","l","p"}, 
      {"0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"}, 
      {"u","u","u","u","u","u","u","u","u","u","u","u","u"}, 
      {"b","6.70","q","l","b","6.70","q","l","b","6.70","q","l","p"}, 
      {"u","u","u","u","u","u","u","u","u","u","u","u","u"},   
     }; 
     Object colData[] = {"Col1","Col2","Col3","Col4","Col5","Col6","Col7","Col8","Col9","Col10","Col11","Col12","Col13"}; 
     return new JTable(rowData, colData) { 
      @Override 
      public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
       Component c = super.prepareRenderer(renderer, row, column); 
       if (isRowSelected(row) || getColumnCount()==0) 
        return c; 

       String type = (String) getValueAt(row, convertColumnIndexToView(11)); 
       if("0.0".equals(type)) 
       { 
        c.setBackground(Color.RED); 
        c.setForeground(Color.WHITE); 
        c.setFont(myFont1); 
        return c; 
       }    
       type = (String) getValueAt(row, convertColumnIndexToView(12)); 
       if("u".equals(type)) 
       { 
        c.setBackground(Color.YELLOW); 
        c.setForeground(Color.WHITE); 
        c.setFont(myFont1); 
        return c; 
       } 
       c.setBackground(Color.WHITE); 
       c.setForeground(Color.BLACK); 
       c.setFont(myFont); 
       return c; 
      } 
     }; 
    } 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setLayout(new BorderLayout()); 
       f.add(new JScrollPane(createTable()), BorderLayout.CENTER); 
       f.setSize(500, 500); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 

Результат:

enter image description here

+0

у вас есть ошибка там, если у 12-го столбца есть u, тогда вы должны нарисовать строку желтым цветом, но если в 11-ом столбце будет 0,0, вы нарисуете его красным и просто вернете – Infested

+0

@Infested OP wasn ' t действительно ясно в этом отношении ... * "[...] то же самое со столбцом 12, так что, если критерий выполняется, в этом случае« u »эта конкретная строка является желтой» *. Это следует его первому критерию. Если он хочет, чтобы 12-й чек пошел первым, он может с уверенностью переупорядочить чеки =) –

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

  • Нет связанных вопросов^_^