I want to have a table where there is a button per entry that would add the Book object to a List called Cart (within a separate class, this has been handled).
What is the best (not easiest) way that I can interface something like that to my current TableModel class as below:
import com.libman.book.Book;
import java.awt.Component;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
public class SearchTableModel extends AbstractTableModel
{
private final String[] columnNames = { "Title", "Author", "Genre", "ISBN", "Checkout"};
private List<Book> books = new ArrayList();
private String cartText = "Add to cart";
public SearchTableModel(List<Book> books)
{
this.books = books;
}
@Override
public String getColumnName(int columnIndex)
{
return columnNames[columnIndex];
}
@Override
public int getRowCount()
{
return books.size();
}
@Override
public int getColumnCount()
{
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
Book book = books.get(rowIndex);
switch (columnIndex)
{
case 0:
return book.getTitle();
case 1:
return book.getAuthor();
case 2:
return book.getGenre();
case 3:
return book.getISBN();
case 4:
return cartText;
}
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex)
{
switch (columnIndex)
{
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return String.class;
}
return null;
}
public void setCartText(String t)
{
cartText = t;
}
}
class JTableButtonRenderer implements TableCellRenderer
{
private TableCellRenderer defaultRenderer;
public JTableButtonRenderer(TableCellRenderer renderer) {
defaultRenderer = renderer;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof Component)
return (Component)value;
return defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
An example of how I'd like the button to look(taken by using the Button Column Class from this online example https://tips4java.wordpress.com/2009/07/12/table-button-column/)
Ideally, the button press should be able to trigger a set of methods, so I'm assuming it'd involve an ActionListener but I'm not that familiar with setting things like this up (first big project).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…