ユーザーが姓または ID を入力して顧客を検索するパネルがあります。SQL クエリ結果の各行を表示する何らかのテーブルを実装したいと考えています。これを行う最善の方法は何ですか?最初に頭に浮かぶのは、多次元配列と JTextArea を使用することです。どう思いますか?
2 に答える
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);
}
});
基本的に、データの 2D 配列を第 1 パラメーターとして使用して tableModel を作成し、第 2 パラメーターのヘッダーを含む配列を作成します。その後、テーブルに動作を指定できます。
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();
}
}