Привет всем Я не нахожу, что неправильно в моем коде ниже. Он заполняет таблицу и заголовки просто отлично. Однако, когда я изменяю строку 1, столбец 1 на test и щелкаю, это не окрашивает строку, как я ожидал. Затем щелчок по тому, на котором я щелкнул, становится зеленым, и с тех пор, когда я нажимаю на стол, он становится зеленым.
Столбец не изменится с 1 (Компания) , так как это будет столбец по умолчанию, в который будут внесены изменения. строка является единственным динамическим числом здесь.
Поток для проверки:
- дважды щелкните IBM.
- введите тест .
- нажмите на любую другую ячейку, чтобы сохранить значение этой ячейки.
- строка не изменяется (строка 1).
- снова нажмите на тестовую ячейку.
- все строки изменятся на зеленый.
Ожидаемый поток:
- дважды щелкните IBM.
- введите тест .
- нажмите на любую другую ячейку, чтобы сохранить значение этой ячейки.
- ячейка, которая была изменена на test , изменяет эту строку green .
- щелкните Акции для ячейки (3, 3) .
- дважды щелкните и измените 4000 на 1000 .
- нажмите на любую другую ячейку, чтобы сохранить значение этой ячейки.
- ячейка, которая была изменена на 1000 , изменяет эту строку красный .
Заполнены таблицы и заголовки:
Нажатие и изменение значения строки 1, столбца 1 на test :
Нажав эту ячейку на другую после редактирования:
А теперь нажмите на любую другую ячейку (обратите внимание, что строка теста не зеленая, как должно быть):
Теперь нажмите на ячейку, которую я редактировал для test :
И вы видите выше, это просто раскраска каждой строки, на которую я нажимаю, независимо от логики, которую я сказал
if ("test" .equals (тип)) {... .
Java-код:
@SuppressWarnings("serial")
public class TableRowRenderingTip extends JPanel {
public TableRowRenderingTip() {
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data =
{
{"Buy", "IBM", new Integer(1000), new Double(80.5), Boolean.TRUE},
{"Sell", "Dell", new Integer(2000), new Double(6.25), Boolean.FALSE},
{"Short Sell", "Apple", new Integer(3000), new Double(7.35), Boolean.TRUE},
{"Buy", "MicroSoft", new Integer(4000), new Double(27.50), Boolean.FALSE},
{"Short Sell", "Cisco", new Integer(5000), new Double(20), Boolean.TRUE}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class getColumnClass(int column) {
return getValueAt(1, column).getClass();
}
};
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Border", createBorder(model));
add(tabbedPane);
}
private JComponent createBorder(DefaultTableModel model) {
JTable table = new JTable(model) {
private Border outside = new MatteBorder(1, 0, 1, 0, Color.RED);
private Border _outside = new MatteBorder(1, 0, 1, 0, Color.GREEN);
private Border inside = new EmptyBorder(0, 1, 0, 1);
private Border highlight = new CompoundBorder(outside, inside);
private Border _highlight = new CompoundBorder(_outside, inside);
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent)c;
String type = (String)getModel().getValueAt(convertRowIndexToModel(row), 1);
if (isRowSelected(row)) {
if ("test".equals(type)) {
jc.setBorder( _highlight ); // Green color
jc.setBackground(Color.GREEN);
} else {
jc.setBorder( highlight ); //Red color
}
}
return c;
}
};
//table.setPreferredScrollableViewportSize(table.getPreferredSize());
//table.changeSelection(0, 0, false, false);
return new JScrollPane( table );
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI()
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Table Row Rendering");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new TableRowRenderingTip() );
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Так что, само собой разумеется, я немного расстроен, чтобы сказать, чтобы, поскольку я уже несколько часов работал над этим, пытаясь выяснить, в чем может быть проблема.
Я уверен, что это будет что-то простое, что я просматриваю ...