- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个显示图书列表的 JTable,它可以被过滤和排序
BookSwing.java
package com.bookretailer.ui;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.border.TitledBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import com.bookretailer.modules.Book;
import com.bookretailer.modules.utils.BookDB;
public class BookSwing extends JFrame {
private final static String TITLE = "Book Retailer - Books";
private JPanel jpInfo = new JPanel();
private JTable table;
private JTextField txtFilter;
private TableRowSorter<BookTableModel> sorter;
private BookTableModel bookTableModel;
private List<Book> booksList;
private Book selectedBook;
private ListSelectionModel listSelectionModel;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BookSwing frame = new BookSwing();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public BookSwing() {
setSize(600, 650);
initData();
jpInfo.setBounds(100, 100, 600, 650);
jpInfo.setLayout(null);
JPanel tbPanel = new JPanel();
tbPanel.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
tbPanel.setBounds(10, 331, 570, 272);
jpInfo.add(tbPanel);
tbPanel.setLayout(null);
bookTableModel = new BookTableModel(booksList);
table = new JTable();
table.setModel(bookTableModel);
sorter = new TableRowSorter<BookTableModel>(bookTableModel);
table.setAutoCreateRowSorter(true);
table.setRowSorter(sorter);
final JTableHeader header = table.getTableHeader();
header.setDefaultRenderer(new HeaderRenderer(table));
List<RowSorter.SortKey> sortKeyList = new ArrayList<RowSorter.SortKey>();
sortKeyList.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeyList);
sorter.sort();
sorter.setSortsOnUpdates(true);
txtFilter = new JTextField();
// Whenever filterText changes, invoke newFilter.
txtFilter.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
filterBook();
}
public void insertUpdate(DocumentEvent e) {
filterBook();
}
public void removeUpdate(DocumentEvent e) {
filterBook();
}
});
JScrollPane scrollPane = new JScrollPane(table);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
initDetail(table.getSelectedRow());
}
});
scrollPane.setBounds(6, 37, 558, 225);
tbPanel.add(scrollPane);
listSelectionModel = table.getSelectionModel();
table.setSelectionModel(listSelectionModel);
listSelectionModel.addListSelectionListener(new ListSelectionHandler());
table.setSelectionModel(listSelectionModel);
JLabel lblBookFilter = new JLabel("Book Filter");
lblBookFilter.setBounds(10, 10, 78, 25);
tbPanel.add(lblBookFilter);
txtFilter.setBounds(75, 10, 489, 25);
tbPanel.add(txtFilter);
txtFilter.setColumns(10);
getContentPane().add(jpInfo);
}
private void initData() {
booksList = BookDB.getBookList();
}
protected void initDetail(int selectedRow) {
selectedBook = booksList.get(selectedRow);
}
private void refreshTableData() {
table.revalidate();
table.repaint();
table.getSelectionModel().clearSelection();
bookTableModel.fireTableDataChanged();
}
private void filterBook() {
RowFilter<TableModel, Object> rf = null;
// If current expression doesn't parse, don't update.
try {
rf = RowFilter.regexFilter("(?i)" + txtFilter.getText());
} catch (java.util.regex.PatternSyntaxException e) {
return;
}
sorter.setRowFilter(rf);
}
class BookTableModel extends AbstractTableModel {
List<Book> booksList;
String[] headerList = { "Book Code", "Title", "Price" };
Class[] classes = { Integer.class, String.class, Double.class };
public BookTableModel(List<Book> list) {
booksList = list;
}
@Override
public int getColumnCount() {
return headerList.length;
}
@Override
public int getRowCount() {
return booksList.size();
}
@Override
public Class<?> getColumnClass(int arg0) {
// TODO Auto-generated method stub
return classes[arg0];
}
// this method is called to set the value of each cell
@Override
public Object getValueAt(int row, int column) {
Book entity = null;
entity = booksList.get(row);
switch (column) {
case 0:
return entity.getBookId();
case 1:
return entity.getTitle();
case 2:
return entity.getPrice();
default:
return "";
}
}
// This method will be used to display the name of columns
public String getColumnName(int col) {
return headerList[col];
}
@Override
public void setValueAt(Object value, int row, int col) {
Book entity = null;
entity = booksList.get(row);
switch (col) {
case 0:
entity.setBookId((Integer) value);
break;
case 1:
entity.setTitle((String) value);
break;
case 2:
entity.setPrice((Double) value);
break;
default:
break;
}
fireTableCellUpdated(row, col);
}
}
private static class HeaderRenderer implements TableCellRenderer {
TableCellRenderer renderer;
public HeaderRenderer(JTable table) {
renderer = table.getTableHeader().getDefaultRenderer();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int col) {
return renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
}
}
class ListSelectionHandler implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
ListSelectionModel model = table.getSelectionModel();
int lead = model.getLeadSelectionIndex();
setFields(lead);
}
}
}
private void setFields(int index) {
System.out.println(booksList.get(index).getTitle());
}
}
我想在用户点击表格行时设置 selectedBook当用户不过滤或排序数据但当用户排序数据时它工作正常 selectedBook 被分配了错误的书
我怎样才能让它工作,以便将正确的书分配给 selectedBook
最佳答案
使用这段代码:
selectedBook = booksList.get(table.convertRowIndexToModel(selectedRow));
关于java - 从选定的 JTable 中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921351/
我有十二个指向不同类别的链接。作为用户定位的一种方式,我想强调用户现在所在的类别( - 按钮)。 如何在 CSS 中实现这一点?我读到了 selected和 active ,但我还没能让它发挥作用。
我想通过单击按钮来获取选择框中的所有选项值(选定/未选定)。我怎样才能做到这一点? 最佳答案 我认为这是使用 Traversing/map 的好机会方法: var valuesArray = $("#
我正在尝试构建一个计算器,其中包含两个数字的两个 TextView 字段。我弄清楚了如何使用“应用程序内”数字键盘输入顶部数字 Operand 1 [textView] 的数字(我知道使用 EditT
我有一个简单的 jQuery $("span.value"),它选择包含文本的节点。此文本保证为整数。如何计算所有选定节点文本的总和,并将总和放入另一个节点? 3 4 5 ? 最佳答案 你可以这样做:
我从同一台服务器上托管的一堆数据库中备份了 mysql 数据库 db1。现在只需要备份具有访问 db1 权限的选定用户,以便我可以在 db1 还原之前将这些特权用户还原到我的新服务器。 最佳答案 St
我有一个 ListView 。我想添加一个动画,如果我选择一个列表项,它将被删除,并且该项目下方的其余项目将通过向上滑动动画向上移动。我已经通过获取其子位置使用线性布局完成了此操作,但我无法理解如何向
我不明白如何使用 Python 解析来自 Outlook 的突出显示(选定)邮件? 我有这个代码,但它适用于上一封邮件。 import win32com.client outlook = win32c
在 Xcode 6 中,您现在可以为选项卡项目的选中和未选中状态设置图标。请参阅下图中的说明: 和 唯一的问题是 SELECTED 状态的图像不显示。它只是显示空白。还有其他人有这个问题吗?请看下面的
在我的数据模型中,我有一个实体组和另一个GroupMember实体。一个Group包含一个或多个GroupMembers,但一个GroupMember只能同时位于一个Group中。到目前为止没有问题,
Android Button 在不同状态(正常、按下、选中、禁用)之间移动时会更改其可绘制背景。背景切换是即时的。是否可以使其平滑(动画)? 最佳答案 是的,这是可能的。您只需为按钮添加 addAni
我使用 emacs 来查看和编辑代码和其他文本文件。我想知道是否有一种方法可以向前或向后搜索当前缓冲区中标记的文本。类似于我在记事本或写字板中可以执行的操作。就像我可以在缓冲区中标记一些文本并执行 C
如何根据状态(选定、禁用)设置自定义选择类?如何根据状态选择(选定、禁用)在自定义下拉列表中设置类?照做了,但什么也没发生。请看我的例子................................
我正在尝试检查下拉菜单中是否存在特定文本值,如果存在,我想将其属性设置为selected。 我成功编写了一个 if 语句来检查文本是否存在: var country = usr.location; i
对于我的应用程序,我想让用户能够在回收器 View 中调整 TextView 项目的文本大小(通过捏缩放或 SeekBar)。默认值应为系统设置中选择的文本大小。最小值应为系统设置中的“非常小”,最大
我正在尝试创建一个 ListBoxItem 模板,该模板在选择时将带有圆角边框。我得到了这个 xaml,它在选择时不起作用:
我正在寻找检索焦点元素的 HTML。查看 webdriver.io 文档,方法 .getActiveElement() 应该可以解决这个问题。但是,我的 IDE (WebStorm) 显示错误,指出它
我创建了一个圆,在我的 onDraw() 方法中围绕圆绘制了一条字符串和一条线(箭头)。 public class Circle extends Activity { public class
对于生产应用程序,我们希望在 Windows 窗体应用程序的 ElementHost 内显示 DatePicker,但我们遇到了 SelectedDate 和 CurrentDate 不可读的问题,因
好的,我在此处和 Google 上的许多网站上搜索了此问题的结果,但找不到针对我的问题的确切解决方案。 我有一个 sql 提取姓名和办公室。所以事情是这样的: $sql = "SELECT m
选中单元格时如何改变灰色? 最佳答案 当用户点击选中的行 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSInd
我是一名优秀的程序员,十分优秀!