Как использовать TableCellRenderer для отображения объекта в таблице в SwingJAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать TableCellRenderer для отображения объекта в таблице в Swing

Сообщение Anonymous »

Я создаю приложение списка задач и показываю все задачи в JTable (который имеет только одну строку). Я также добавил RowFilter в JTable, чтобы сортировать задачи по различным категориям. Я создал класс, реализующий TableCellRenderer, чтобы печатать только имя задачи и количество дней, оставшихся до крайнего срока задачи. Вот в чем проблема: я хочу, чтобы пользователь мог щелкнуть задачу (или задачи), а затем выбрать, что делать с этой задачей, но кажется, что я не могу щелкнуть ни одну строку в таблице, я не знаю. не знаю, в чем проблема
Это мой код для JTable, модель таблицы, которую я использовал, и созданный мной собственный модуль рендеринга ячеек

Код: Выделить всё

package com.daniel.todolist.gui.todolist_components;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableRowSorter;
import javax.swing.table.AbstractTableModel;

import java.awt.*;
import java.awt.event.*;
import java.util.stream.*;
import com.daniel.todolist.db_objs.*;
import java.util.*;

public class ContentPage extends JPanel {
private java.util.List tasks;
private JTable tasksTable;
private TableRowSorter sorter;
private boolean pressingCTRL = false;
private KeyListener keyListener;
private MouseAdapter tableMouseListener;
Vector selectedCells = new Vector();

public ContentPage(java.util.List tasks) {
super();
this.tasks = tasks;
setBackground(Color.white);
setupContentPage();
}

public void setupContentPage(){
MyTableModel model = new MyTableModel();    // this is my custom table model
tasksTable = new JTable(model);
tasksTable.setDefaultRenderer(Task.class, new TaskCellRenderer());
sorter = new TableRowSorter(model);
tasksTable.setRowSorter(sorter);
// call the something() method to setup the mouse and key listener
something();
tasksTable.addKeyListener(keyListener);
tasksTable.addMouseListener(tableMouseListener);
add(new JScrollPane(tasksTable));
}

// I didn't know how to implement row selection, I got this function from another stack question
public void something(){

keyListener = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_CONTROL){
pressingCTRL = true;
}
}

@Override
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_CONTROL){
pressingCTRL = false;
}
}
};

tableMouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
if(pressingCTRL){   // check if the user is pressing the control key
int row = tasksTable.rowAtPoint(e.getPoint());
int col = tasksTable.columnAtPoint(e.getPoint());
int[] newEntry = new int[]{row, col};
// print out the entry so we can see what it is
System.out.println(newEntry);   // this didn't print out anything
if(selectedCells.contains(newEntry)){
selectedCells.remove(newEntry);
}
else{
selectedCells.add(newEntry);
}
}
}
};
}

// this is my function for filtering the table, this method is called and a category is passed
public void filterTable(String category){
RowFilter filter =  null;

filter = new RowFilter(){
@Override
public boolean include(Entry

Подробнее здесь: [url]https://stackoverflow.com/questions/78747123/how-to-use-a-tablecellrenderer-to-display-an-object-in-a-table-in-swing[/url]

Вернуться в «JAVA»