1

我有一个面板,用户将通过输入姓氏或 ID 来搜索客户。我想实现某种表来显示每一行 SQL 查询结果。最好的方法是什么?我首先想到的是使用多维数组和 JTextArea。你怎么看?

4

2 回答 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 回答