Я предполагаю, что содержимое каждой ячейки - это номер даты, поэтому я не уверен, что вы пытаетесь сделать или где у вас есть несколько строк в одной ячейке.
Вы имели в виду выбор ячейки таблицы вместо всей строки?
Если это то, что вы имели в виду, вы можете сделать это, изменив модели выбора строк / столбцов для вашей таблицы.
Если это не так, пожалуйста, сузьте проблему и предоставьте полный (очищенный) исходный код.
Редактировать:
Как сказал eugener, рендерер просто рисует вашу JTextArea внутри ячейки как изображение, основанное на значении для этой ячейки. Однако вы можете создать свою собственную пользовательскую модель для представления состояния ячейки (вместо простого значения String, которое вы можете использовать, например, MyModel, который содержит String и некоторые дополнительные данные) и визуализировать ячейку на основе этой модели. Например: вы можете обнаружить щелчки мыши (подключить слушатель мыши к Jtable), а затем изменить состояние этой модели - обновить начало и конец выделения на основе положения мыши для определенного значения ячейки. Внутри getCellRenderer приведите значение к типу вашего объекта (MyModel), которое содержит начальные и конечные данные выбора и использует их для визуализации текстовой области.
Вот пример кода, который увеличивает выделение при щелчке по ячейке (вы должны изменить ее, чтобы установить правильные позиции каретки на основе позиции щелчка мыши), код грязный (его нужно немного почистить), но работает:
вставьте это в свой рендерер ячейки:
CellValue myValue = (CellValue)value;
HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(
Color.green);
textField.getHighlighter().removeAllHighlights();
try {
textField.getHighlighter().addHighlight(myValue.highlightStart, myValue.highlightEnd, painter);
} catch (BadLocationException e) {
System.out.println("Miss");
}
А вот пример MyModel:
public class MyModel extends AbstractTableModel {
class CellValue {
String value;
int highlightStart;
int highlightEnd;
CellValue(String val) {
this.value = val;
}
@Override
public String toString() {
return value;
}
}
CellValue[][] values = new CellValue[2][7];
public MyModel() {
for(int i = 0; i < 2; i++) {
for(int j=0; j < 7; j++) {
values[i][j] = new CellValue(i + ":" + j);
}
}
}
@Override
public int getColumnCount() {
return 7;
}
@Override
public int getRowCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return values[rowIndex][columnIndex];
}
}
Вот главный класс:
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(500,500));
final JTable table = new JTable(new MyModel());
for(int i =0; i < 7; i++) {
table.getColumnModel().getColumn(i).setCellRenderer(new tblCalendarRenderer());
}
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
Object obj = table.getValueAt(row, column);
System.out.println("value " + obj);
CellValue cellValue = (CellValue)obj;
cellValue.highlightEnd++;
table.repaint();
}
});
table.setRowHeight(50);
JScrollPane scp = new JScrollPane(table);
frame.add(scp);
frame.setVisible(true);
}
}