我有一个面板,用户将通过输入姓氏或 ID 来搜索客户。我想实现某种表来显示每一行 SQL 查询结果。最好的方法是什么?我首先想到的是使用多维数组和 JTextArea。你怎么看?
问问题
1901 次
2 回答
3
你看过JTable吗?
编辑:这是我第一次回复,所以我想当我做错事时我会注意到。我最近创建了与您的目标类似的东西,所以这段代码可能会让您上路:
String[][] results = null;
if(query != null){
results = domeinController.Search(query);
} else {
results = domeinController.ReturnAllAccounts();
txtSearch.setText("");
}
TableModel table = new DefaultTableModel(results, new String[] {d("LBL_SERVICE"), d("LBL_ACC_NAME"), d("LBL_PASSWORD"), d("LBL_EMAIL")});
tblResults = new JTable(){
public boolean isCellEditable(int roxIndex, int colIndex){
return false;
}
};
jScrollPane1.setViewportView(tblResults);
tblResults.setModel(table);
tblResults.setAutoCreateRowSorter(true);
tblResults.setBounds(55, 145, 423, 228);
tblResults.getTableHeader().setAutoscrolls(true);
tblResults.getTableHeader().setReorderingAllowed(false);
tblResults.getTableHeader().setResizingAllowed(false);
tblResults.setShowVerticalLines(false);
tblResults.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
tblResultsMousePressed(evt);
}
});
基本上,您创建一个带有二维数据数组作为第一个参数的 tableModel,以及一个带有标题的数组作为您的第二个参数。之后,您可以指定表的行为。
于 2012-11-30T17:54:09.237 回答
0
我强烈建议将Glazed List考虑在内。
它是一个库,负责处理与在表格中显示表格数据相关的大部分繁重工作,同时具有过滤和排序功能。它还提供了一个多线程安全的数据模型。使用裸 Swing 和 Java 要正确实现它要困难得多。
这是一个很好的教程。一旦有人开始编写 CRUD GUI,迟早所有人都会想要所谓的“标准功能”,所有面向表的 gui 都共享这些功能。当您可以建立经过验证的解决方案时,为什么要浪费时间发明这一切并冒着犯很多错误的风险。尤其是当它如此简单的时候。
一个示例,显示基于 XML 的 JTable:
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
// a simple issues library
import ca.odell.issuezilla.*;
// glazed lists
import ca.odell.glazedlists.*;
import ca.odell.glazedlists.swing.*;
/**
* An IssueBrowser is a program for finding and viewing issues.
*
* @author <href="mailto:jesse@odel.on.ca">Jesse Wilson</a>
*/
public class IssuesBrowser {
/** event list that hosts the issues */
private EventList issuesEventList = new BasicEventList();
/**
* Create an IssueBrowser for the specified issues.
*/
public IssuesBrowser(Collection issues) {
issuesEventList.addAll(issues);
}
/**
* Display a frame for browsing issues.
*/
public void display() {
// create a panel with a table
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
EventListModel issuesListModel = new EventListModel(issuesEventList);
JList issuesJList = new JList(issuesListModel);
JScrollPane issuesListScrollPane = new JScrollPane(issuesJList);
panel.add(issuesListScrollPane, new GridBagConstraints(...));
// create a frame with that panel
JFrame frame = new JFrame("Issues");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(540, 380);
frame.getContentPane().add(panel);
frame.show();
}
/**
* Launch the IssuesBrowser from the commandline.
*/
public static void main(String[] args) {
if(args.length != 1) {
System.out.println("Usage: IssuesBrowser <file>");
return;
}
// load some issues
Collection issues = null;
try {
IssuezillaXMLParser parser = new IssuezillaXMLParser();
InputStream issuesInStream = new FileInputStream(args[0]);
issues = parser.loadIssues(issuesInStream, null);
issuesInStream.close();
} catch(IOException e) {
e.printStackTrace();
return;
}
// create the browser
IssuesBrowser browser = new IssuesBrowser(issues);
browser.display();
}
}
于 2012-11-30T17:56:22.207 回答