使用Java创建查询结果表(GUI)

时间:2012-11-30 17:52:36

标签: java data-structures

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

2 个答案:

答案 0 :(得分: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,其中2D数据数组作为第一个参数,以及一个包含第二个参数标题的数组。之后,您可以指定表格的行为。

答案 1 :(得分:0)

我强烈建议考虑Glazed List

这是一个库,负责处理与表格中的表格数据相关的大部分重量提升,包括过滤和排序。它还提供多线程安全的数据模型。使用裸Swing和Java,要正确实现它要困难得多。

Here是一个很好的教程。一旦任何人开始编写CRUD GUI,迟早所有人都会想要所谓的“标准功能”,所有面向表的guis都有共同点。当你可以建立成熟的解决方案时,为什么要浪费时间发明这一切并冒着犯很多错误的风险。特别是,当它如此简单时。

示例,显示基于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();
 }
}