- 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;
nhập java.util.ArrayList;
nhập 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 sorter;
private BookTableModel bookTableModel;
private List booksList;
private Book selectedBook;
private ListSelectionModel listSelectionModel;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
công khai void run() {
thử {
BookSwing frame = new BookSwing();
frame.setVisible(true);
} catch (Ngoại lệ 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);
table.setAutoCreateRowSorter(true);
table.setRowSorter(sorter);
final JTableHeader header = table.getTableHeader();
header.setDefaultRenderer(new HeaderRenderer(table));
List sortKeyList = new ArrayList();
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 rf = null;
// If current expression doesn't parse, don't update.
thử {
rf = RowFilter.regexFilter("(?i)" + txtFilter.getText());
} catch (java.util.regex.PatternSyntaxException e) {
trở lại;
}
sorter.setRowFilter(rf);
}
class BookTableModel extends AbstractTableModel {
List booksList;
String[] headerList = { "Book Code", "Title", "Price" };
Class[] classes = { Integer.class, String.class, Double.class };
public BookTableModel(List list) {
booksList = list;
}
@Ghi đè
public int getColumnCount() {
return headerList.length;
}
@Ghi đè
public int getRowCount() {
return booksList.size();
}
@Ghi đè
public Class> getColumnClass(int arg0) {
// TODO Phương thức tự động tạo stub
return classes[arg0];
}
// this method is called to set the value of each cell
@Ghi đè
public Object getValueAt(int row, int column) {
Book entity = null;
entity = booksList.get(row);
switch (column) {
trường hợp 0:
return entity.getBookId();
trường hợp 1:
return entity.getTitle();
case 2:
return entity.getPrice();
mặc định:
return "";
}
}
// This method will be used to display the name of columns
public String getColumnName(int col) {
return headerList[col];
}
@Ghi đè
public void setValueAt(Object value, int row, int col) {
Book entity = null;
entity = booksList.get(row);
switch (col) {
trường hợp 0:
entity.setBookId((Integer) value);
phá vỡ;
trường hợp 1:
entity.setTitle((String) value);
phá vỡ;
case 2:
entity.setPrice((Double) value);
phá vỡ;
mặc định:
phá vỡ;
}
fireTableCellUpdated(row, col);
}
}
private static class HeaderRenderer implements TableCellRenderer {
TableCellRenderer renderer;
public HeaderRenderer(JTable table) {
renderer = table.getTableHeader().getDefaultRenderer();
}
@Ghi đè
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 {
@Ghi đè
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
câu trả lời hay nhất
使用这段代码:
selectedBook = booksList.get(table.convertRowIndexToModel(selectedRow));
关于java - 从选定的 JTable 中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921351/
Tôi cần đặt văn bản vào một Div, trong một Div khác, trong một Div khác. Vì vậy, nó trông như thế này: #document Thay đổi mã PIN
Những điều kỳ lạ đã xảy ra. Tôi có một mã html cơ bản. html, đầu, thân. (Vì tôi nhận được một số lượt phản đối nên đây là mã đầy đủ) Đây là CSS của tôi: html { backgroun
Tôi đang cố tải một tập hợp hình ảnh từ Nội dung vào ImageView có trong UICollectionview nhưng bất cứ khi nào tôi chạy ứng dụng thì nó đều báo lỗi. Và cũng không có hình ảnh nào được hiển thị. Tôi đang ở ViewDidLoa
Tôi cần thay đổi một số biến môi trường dựa trên đầu ra của tập lệnh Perl có tham số. Trong tcsh, tôi có thể sử dụng lệnh bí danh để đánh giá kết quả đầu ra của tập lệnh Perl. tcsh: bí danh setsdk 'eval `/localhome/
Tôi đã tạo một ứng dụng Blazor (phía máy chủ) mới bằng Xác thực Windows và chạy nó bằng IIS Express. Nó sẽ hiển thị thông báo "Xin chào miền\Người dùng!" từ Ra sau ở trên cùng bên phải!
Đây là phương thức void login(Event event) của tôi; Tôi muốn biết cách thực hiện nó trong Kotlin. Câu trả lời hay nhất Trong Kotlin, toán tử ký tự đại diện là *. Nó báo cho trình biên dịch rằng nó chưa được biết, nhưng một khi đã biết thì không có lớp nào khác
Hãy xem đoạn mã sau cho câu chuyện trong sách nếu story.title.length < 140 - var story
Tôi đang cố gắng học xử lý chuỗi trong C. Tôi đã viết một chương trình lưu trữ một số bản nhạc và giúp người dùng kiểm tra xem bài hát mà họ nghĩ đến có tồn tại trong các bản nhạc được lưu trữ hay không. Điều này được thực hiện bằng cách yêu cầu người dùng nhập một chuỗi ký tự. Chương trình sau đó sử dụng strstr()
Tôi đang học sscanf và gặp chuỗi định dạng sau: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); Phần ] có nghĩa là quét cho đến khi gặp ':' và gán nó cho a. :
def char_check(x,y): nếu (str(x) trong y hoặc x.find(y) > -1) hoặc (str(y) trong x hoặc y.find(x) > -1):
Tôi gặp tình huống muốn đưa các dòng hiện có từ tệp văn bản vào một khối mới. dòng 1 dòng 2 dòng trong khối dòng 3 dòng 4 sẽ trở thành dòng 1 dòng 2 dòng
Tôi có một dự án mới và tôi đang cố gắng thiết lập thanh công cụ gỡ lỗi Django. Trước tiên, tôi đã thử thiết lập nhanh, việc này chỉ đơn giản là thêm 'debug_toolbar' vào danh sách các ứng dụng đã cài đặt của tôi. Với điều này, khi tôi truy cập URL gốc của mình, việc gỡ lỗi
Trong Matlab, nếu tôi có hàm f, giả sử chữ ký là f(a,b,c), tôi có thể tạo một hàm chỉ có một biến b, biến này sẽ gọi f với a=a1 và c=c1 cố định: g = @(b) f(a1, b,
Tôi không hiểu tại sao lại có thêm khoảng cách dọc giữa các phần tử trong ForEach khi hiển thị các dải phân cách ngang tùy chỉnh bên trong VStack khi sử dụng GeometryReader bên trong ScrollView. Cuộn
Tôi đang tự hỏi, có hướng dẫn hoặc phương pháp hay nhất nào về thời điểm sử dụng phiên và cookie không? Những gì nên và không nên lưu trữ trong đó? Cảm ơn bạn! Câu trả lời hay nhất Những tài liệu này cung cấp sự hiểu biết tốt về các vấn đề bảo mật cookie phiên và
Tôi có ma trận Nx3 ở dạng scipy/numpy và tôi muốn sử dụng nó để tạo biểu đồ thanh 3 chiều, trong đó trục X và Y được xác định bởi các giá trị của cột thứ nhất và thứ hai của ma trận và chiều cao của mỗi thanh ở cột thứ ba của ma trận, số lượng thanh được xác định bởi N.
Giả sử tôi khởi tạo semaphore theo hai cách khác nhau sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) Bây giờ, sem_wait(&randomsem) trong cả hai trường hợp
Tôi nghi ngờ cách giá trị được lưu trữ trong "WORD" vì PStr chứa đầu ra thực tế. ? Vì Pstr lưu trữ chữ thường thành chữ in hoa, làm sao nó có thể được đưa ra dưới dạng "WORD" trong printf. Có ai có thể vui lòng không? Giải thích? #bao gồm
Tôi có một mảng 3x3: var my_array = [[0,1,2], [3,4,5], [6,7,8]];
Tôi nhận ra rằng bạn có thể dễ dàng kiểm tra tiêu điểm bằng cách sử dụng: var hasFocus = true; $(window).blur(function(){ hasFocus = false; });
Tôi là một lập trình viên xuất sắc, rất giỏi!