表格与JDBC结果 : 表 « 图形用户界面 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 图形用户界面 » 屏幕截图 
表格与JDBC结果
表格与JDBC结果
 
/*
Swing, Second Edition
by Matthew Robinson, Pavel Vorobiev

*/

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.text.*;
import java.sql.*;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class StocksTable5 extends JFrame 
{
  protected JTable m_table;
  protected StockTableData m_data;
  protected JLabel m_title;

  public StocksTable5() {
    super("Stocks Table");
    setSize(600300);

    m_data = new StockTableData();

    m_title = new JLabel(m_data.getTitle()
      new ImageIcon("money.gif"), SwingConstants.LEFT);
    m_title.setFont(new Font("TimesRoman",Font.BOLD,24));
    m_title.setForeground(Color.black);
    getContentPane().add(m_title, BorderLayout.NORTH);

    m_table = new JTable();
    m_table.setAutoCreateColumnsFromModel(false);
    m_table.setModel(m_data)
        
    for (int k = 0; k < StockTableData.m_columns.length; k++) {
      DefaultTableCellRenderer renderer = new 
        ColoredTableCellRenderer();
      renderer.setHorizontalAlignment(
        StockTableData.m_columns[k].m_alignment);
      TableColumn column = new TableColumn(k, 
      StockTableData.m_columns[k].m_width, renderer, null);
      m_table.addColumn(column);   
    }

    JTableHeader header = m_table.getTableHeader();
    header.setUpdateTableInRealTime(true);
    header.addMouseListener(m_data.new ColumnListener(m_table));
    header.setReorderingAllowed(true);

    JScrollPane ps = new JScrollPane();
    ps.getViewport().add(m_table);
    getContentPane().add(ps, BorderLayout.CENTER);

    JMenuBar menuBar = createMenuBar();
      setJMenuBar(menuBar);

    WindowListener wndCloser = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };
    addWindowListener(wndCloser);
    setVisible(true);
  }

  protected JMenuBar createMenuBar() {
    JMenuBar menuBar = new JMenuBar();
        
    JMenu mFile = new JMenu("File");
    mFile.setMnemonic('f');

    JMenuItem mData = new JMenuItem("Retrieve Data...");
    mData.setMnemonic('r');
    ActionListener lstData = new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
        retrieveData()
      }
    };
    mData.addActionListener(lstData);
    mFile.add(mData);
    mFile.addSeparator();

    JMenuItem mExit = new JMenuItem("Exit");
    mExit.setMnemonic('x');
    ActionListener lstExit = new ActionListener() { 
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    };
    mExit.addActionListener(lstExit);
    mFile.add(mExit);
    menuBar.add(mFile);

    return menuBar;
  }

  public void retrieveData() {
    SimpleDateFormat frm = new SimpleDateFormat("MM/dd/yyyy");
    String currentDate = frm.format(m_data.m_date);
    String result = (String)JOptionPane.showInputDialog(this, 
      "Please enter date in form mm/dd/yyyy:""Input"
      JOptionPane.INFORMATION_MESSAGE, null, null, 
      currentDate);
    if (result==null)
      return;

    java.util.Date date = null;
    try 
      date = frm.parse(result)
    }
    catch (java.text.ParseException ex) { 
      date = null
    }
        
    if (date == null) {
      JOptionPane.showMessageDialog(this, 
        result+" is not a valid date",
        "Warning", JOptionPane.WARNING_MESSAGE);
      return;
    }

    setCursorCursor.getPredefinedCursor(Cursor.WAIT_CURSOR) );
    switch (m_data.retrieveData(date)) {
      case 0:    // Ok with data
        m_title.setText(m_data.getTitle());
        m_table.tableChanged(new TableModelEvent(m_data))
        m_table.repaint();
        break;
      case 1// No data
        JOptionPane.showMessageDialog(this, 
          "No data found for "+result,
          "Warning", JOptionPane.WARNING_MESSAGE);
        break;
      case -1// Error
        JOptionPane.showMessageDialog(this, 
          "Error retrieving data",
          "Warning", JOptionPane.WARNING_MESSAGE);
        break;
    }
    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  }

  public static void main(String argv[]) {
    new StocksTable5();
  }
}

class ColoredTableCellRenderer extends DefaultTableCellRenderer
{
  public void setValue(Object value
  {
    if (value instanceof ColorData) {
      ColorData cvalue = (ColorData)value;
      setForeground(cvalue.m_color);
      setText(cvalue.m_data.toString());
    }
    else if (value instanceof IconData) {
      IconData ivalue = (IconData)value;
      setIcon(ivalue.m_icon);
      setText(ivalue.m_data.toString());
    }
    else
      super.setValue(value);
  }
}

class Fraction
{
  public int m_whole;
  public int m_nom;
  public int m_den;

  public Fraction(double value) {
    int sign = value <? -1;
    value = Math.abs(value);
    m_whole = (int)value;
    m_den = 32;
    m_nom = (int)((value-m_whole)*m_den);
    while (m_nom!=&& m_nom%2==0) {
      m_nom /= 2;
      m_den /= 2;
    }
    if (m_whole==0)
      m_nom *= sign;
    else
      m_whole *= sign;
  }

  public double doubleValue() {
    return (double)m_whole + (double)m_nom/m_den;
  }

  public String toString() {
    if (m_nom==0)
      return ""+m_whole;
    else if (m_whole==0)
      return ""+m_nom+"/"+m_den;
    else
      return ""+m_whole+" "+m_nom+"/"+m_den;
  }
}

class SmartLong
{
  protected static NumberFormat FORMAT;
  static {
    FORMAT = NumberFormat.getInstance();
    FORMAT.setGroupingUsed(true);
  }

  public long m_value;

  public SmartLong(long value) { m_value = value; }

  public long longValue() { return m_value; }

  public String toString() { return FORMAT.format(m_value)}
}


class ColorData
{
  public Color  m_color;
  public Object m_data;
  public static Color GREEN = new Color(01280);
  public static Color RED = Color.red;

  public ColorData(Fraction data) {
    m_color = data.doubleValue() >= ? GREEN : RED;
    m_data  = data;
  }

  public ColorData(Color color, Object data) {
    m_color = color;
    m_data  = data;
  }
    
  public ColorData(Double data) {
    m_color = data.doubleValue() >= ? GREEN : RED;
    m_data  = data;
  }
    
  public String toString() {
    return m_data.toString();
  }
}

class IconData
{
  public ImageIcon  m_icon;
  public Object m_data;

  public IconData(ImageIcon icon, Object data) {
    m_icon = icon;
    m_data = data;
  }
    
  public String toString() {
    return m_data.toString();
  }
}

class StockData
{
  public static ImageIcon ICON_UP = new ImageIcon("ArrUp.gif");
  public static ImageIcon ICON_DOWN = new ImageIcon("ArrDown.gif");
  public static ImageIcon ICON_BLANK = new ImageIcon("blank.gif");

  public IconData  m_symbol;
  public String  m_name;
  public Fraction  m_last;
  public Fraction  m_open;
  public ColorData  m_change;
  public ColorData  m_changePr;
  public SmartLong  m_volume;

  public StockData(String symbol, String name, double last, 
   double open, double change, double changePr, long volume) {
    m_symbol = new IconData(getIcon(change), symbol);
    m_name = name;
    m_last = new Fraction(last);
    m_open = new Fraction(open);
    m_change = new ColorData(new Fraction(change));
    m_changePr = new ColorData(new Double(changePr));
    m_volume = new SmartLong(volume);
  }

  public static ImageIcon getIcon(double change) {
    return (change>? ICON_UP : (change<? ICON_DOWN : 
      ICON_BLANK));
  }
}

class ColumnData
{
  public String  m_title;
  public int     m_width;
  public int     m_alignment;

  public ColumnData(String title, int width, int alignment) {
    m_title = title;
    m_width = width;
    m_alignment = alignment;
  }
}

class StockTableData extends AbstractTableModel 
{
  static final public ColumnData m_columns[] {
    new ColumnData"Symbol"100, JLabel.LEFT ),
    new ColumnData"Name"160, JLabel.LEFT ),
    new ColumnData"Last"100, JLabel.RIGHT ),
    new ColumnData"Open"100, JLabel.RIGHT ),
    new ColumnData"Change"100, JLabel.RIGHT ),
    new ColumnData"Change %"100, JLabel.RIGHT ),
    new ColumnData"Volume"100, JLabel.RIGHT )
  };

  protected SimpleDateFormat m_frm;
  protected Vector m_vector;
  protected java.util.Date m_date;

  protected int m_sortCol = 0;
  protected boolean m_sortAsc = true;

  protected int m_result = 0;

  public StockTableData() {
    m_frm = new SimpleDateFormat("MM/dd/yyyy");
    m_vector = new Vector();
    setDefaultData();
  }

  public void setDefaultData() {
    try 
      m_date = m_frm.parse("4/6/1999")
    }
    catch (java.text.ParseException ex) { 
      m_date = null
    }

    m_vector.removeAllElements();
    m_vector.addElement(new StockData("ORCL""Oracle Corp."
      23.687525.375, -1.6875, -6.4224976600));
    m_vector.addElement(new StockData("EGGS""Egghead.com"
      17.2517.4375, -0.1875, -1.432146400));
    m_vector.addElement(new StockData("T""AT&T"
      65.187566, -0.8125, -0.10554000));
    m_vector.addElement(new StockData("LU""Lucent Technology"
      64.62559.93754.68759.6529856300));
    m_vector.addElement(new StockData("FON""Sprint"
      104.5625106.375, -1.8125, -1.821135100));
    m_vector.addElement(new StockData("ENML""Enamelon Inc."
      4.8755, -0.125035900))
    m_vector.addElement(new StockData("CPQ""Compaq Computers"
      30.87531.25, -0.375, -2.1811853900));
    m_vector.addElement(new StockData("MSFT""Microsoft Corp."
      94.062595.1875, -1.125, -0.9219836900));
    m_vector.addElement(new StockData("DELL""Dell Computers"
      46.187544.51.68756.2447310000));
    m_vector.addElement(new StockData("SUNW""Sun Microsystems"
      140.625130.93751010.62517734600));
    m_vector.addElement(new StockData("IBM""Intl. Bus. Machines"
      183183.125, -0.125, -0.514371400));
    m_vector.addElement(new StockData("HWP""Hewlett-Packard"
      7071.0625, -1.4375, -2.012410700));
    m_vector.addElement(new StockData("UIS""Unisys Corp."
      28.2529, -0.75, -2.592576200));
    m_vector.addElement(new StockData("SNE""Sony Corp."
      96.187595.6251.1251.18330600));
    m_vector.addElement(new StockData("NOVL""Novell Inc."
      24.062524.375, -0.3125, -3.026047900));
    m_vector.addElement(new StockData("HIT""Hitachi, Ltd."
      78.577.6250.8751.1249400));

    Collections.sort(m_vector, new 
      StockComparator(m_sortCol, m_sortAsc));
  }

  public int getRowCount() {
    return m_vector==null : m_vector.size()
  }

  public int getColumnCount() { 
    return m_columns.length; 
  

  public String getColumnName(int column) {
    String str = m_columns[column].m_title;
    if (column==m_sortCol)
      str += m_sortAsc ? ">>" "<<";
    return str;
  }
 
  public boolean isCellEditable(int nRow, int nCol) {
    return false;
  }

  public Object getValueAt(int nRow, int nCol) {
    if (nRow < || nRow>=getRowCount())
      return "";
    StockData row = (StockData)m_vector.elementAt(nRow);
    switch (nCol) {
      case 0return row.m_symbol;
      case 1return row.m_name;
      case 2return row.m_last;
      case 3return row.m_open;
      case 4return row.m_change;
      case 5return row.m_changePr;
      case 6return row.m_volume;
    }
    return "";
  }

  public String getTitle() {
    if (m_date==null)
      return "Stock Quotes";
    return "Stock Quotes at "+m_frm.format(m_date);
  }

  public int retrieveData(final java.util.Date date) {
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(date);
    int month = calendar.get(Calendar.MONTH)+1;
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    int year = calendar.get(Calendar.YEAR);

    final String query = "SELECT data.symbol, symbols.name, "+
      "data.last, data.open, data.change, data.changeproc, "+
      "data.volume FROM DATA INNER JOIN SYMBOLS "+
      "ON DATA.symbol = SYMBOLS.symbol WHERE "+
      "month(data.date1)="+month+" AND day(data.date1)="+day+
      " AND year(data.date1)="+year;

    Thread runner = new Thread() {
      public void run() {
        try {
          // Load the JDBC-ODBC bridge driver
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          Connection conn = DriverManager.getConnection(
            "jdbc:odbc:Market""admin""");

          Statement stmt = conn.createStatement();
          ResultSet results = stmt.executeQuery(query);

          boolean hasData = false;
          while (results.next()) {
            if (!hasData) {
              m_vector.removeAllElements();
              hasData = true;
            }
            String  symbol = results.getString(1);
            String  name = results.getString(2);
            double  last = results.getDouble(3);
            double  open = results.getDouble(4);
            double  change = results.getDouble(5);
            double  changePr = results.getDouble(6);
            long volume = results.getLong(7);
            m_vector.addElement(new StockData(symbol, name, last, 
              open, change, changePr, volume));
          }
          results.close();
          stmt.close();
          conn.close();

          if (!hasData)    // We've got nothing
            m_result = 1;
        }
        catch (Exception e) {
          e.printStackTrace();
          System.err.println("Load data error: "+e.toString());
          m_result = -1;
        }
        m_date = date;
        Collections.sort(m_vector, 
          new StockComparator(m_sortCol, m_sortAsc));
        m_result = 0;
      }
    };
    runner.start();

    return m_result;
  }

  class ColumnListener extends MouseAdapter
  {
    protected JTable m_table;

    public ColumnListener(JTable table) {
      m_table = table;
    }

    public void mouseClicked(MouseEvent e) {
      TableColumnModel colModel = m_table.getColumnModel();
      int columnModelIndex = colModel.getColumnIndexAtX(e.getX());
      int modelIndex = colModel.getColumn(columnModelIndex).getModelIndex();

      if (modelIndex < 0)
        return;
      if (m_sortCol==modelIndex)
        m_sortAsc = !m_sortAsc;
      else
        m_sortCol = modelIndex;

      for (int i=0; i < m_columns.length; i++) {
        TableColumn column = colModel.getColumn(i);
        column.setHeaderValue(getColumnName(column.getModelIndex()));    
      }
      m_table.getTableHeader().repaint();  

      Collections.sort(m_vector, new 
        StockComparator(modelIndex, m_sortAsc));
      m_table.tableChanged(
        new TableModelEvent(StockTableData.this))
      m_table.repaint();  
    }
  }
}

class StockComparator implements Comparator
{
  protected int     m_sortCol;
  protected boolean m_sortAsc;

  public StockComparator(int sortCol, boolean sortAsc) {
    m_sortCol = sortCol;
    m_sortAsc = sortAsc;
  }

  public int compare(Object o1, Object o2) {
    if(!(o1 instanceof StockData|| !(o2 instanceof StockData))
      return 0;
    StockData s1 = (StockData)o1;
    StockData s2 = (StockData)o2;
    int result = 0;
    double d1, d2;
    switch (m_sortCol) {
      case 0:    // symbol
        String str1 = (String)s1.m_symbol.m_data;
        String str2 = (String)s2.m_symbol.m_data;
        result = str1.compareTo(str2);
        break;
      case 1:    // name
        result = s1.m_name.compareTo(s2.m_name);
        break;
      case 2:    // last
        d1 = s1.m_last.doubleValue();
        d2 = s2.m_last.doubleValue();
        result = d1<d2 ? -(d1>d2 ? 0);
        break;
      case 3:    // open
        d1 = s1.m_open.doubleValue();
        d2 = s2.m_open.doubleValue();
        result = d1<d2 ? -(d1>d2 ? 0);
        break;
      case 4:    // change
        d1 = ((Fraction)s1.m_change.m_data).doubleValue();
        d2 = ((Fraction)s2.m_change.m_data).doubleValue();
        result = d1<d2 ? -(d1>d2 ? 0);
        break;
      case 5:    // change %
        d1 = ((Double)s1.m_changePr.m_data).doubleValue();
        d2 = ((Double)s2.m_changePr.m_data).doubleValue();
        result = d1<d2 ? -(d1>d2 ? 0);
        break;
      case 6:    // volume
        long l1 = s1.m_volume.longValue();
        long l2 = s2.m_volume.longValue();
        result = l1<l2 ? -(l1>l2 ? 0);
        break;
    }

    if (!m_sortAsc)
      result = -result;
    return result;
  }

  public boolean equals(Object obj) {
    if (obj instanceof StockComparator) {
      StockComparator compObj = (StockComparator)obj;
      return (compObj.m_sortCol==m_sortCol&& 
        (compObj.m_sortAsc==m_sortAsc);
    }
    return false;
  }
}




           
         
  
Related examples in the same category
1. 创建一个表格
2. Creates tables that allow rows and columns to be added or deleted
3. 从列表数据和列名建立一个表
4. Getting the Number of Rows and Columns in a JTable Component
5. 添加数据到表格组件
6. 通过DefaultTableModel添加列到表格
7. 通过DefaultTableModel插入一行到表格
8. Insert a row to a table through DefaultTableModel at specified row
9. 滚动表滚动表
10. 简单示范表格简单示范表格
11. 创建一个表从两个二维数组创建一个表从两个二维数组
12. 创建表与Unicode数据创建表与Unicode数据
13. 使用表,以显示输入的数据(整数,布尔,彩色)使用表,以显示输入的数据(整数,布尔,彩色)
14. 调整表的大小调整表的大小
15. 费用表费用表
16. StockTable 6:事件和动态显示StockTable 6:事件和动态显示
17. 表格选择事件表格选择事件
18. 表行和列的选择表行和列的选择
19. 表选择模式表选择模式
20. Use code to change Table Selection Use code to change Table Selection
21. 结果显示在表(表格)
22. 结果表:继承AbstractTable和JDBC结果集ResultSet
23. 列表界面性能,表格和排序列表界面性能,表格和排序
24. 属性表:使用表格来显示和编辑属性属性表:使用表格来显示和编辑属性
25. 表与工具提示,单元格和列标题表与工具提示,单元格和列标题
26. StockTable 4 :表排序StockTable 4 :表排序
27. Table Sort Test
28. 表格排序:点击表头进行表排序表格排序:点击表头进行表排序
29. 创建表格的图像
30. JTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
31. JTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
32. JTable.setColumnSelectionAllowed(boolean b);
33. JTable.setRowSelectionAllowed(boolean b);
34. JTable.setCellSelectionEnabled(boolean b);
35. 处理选择和模型的变化事件
36. ListSelectionModel rowSelMod = JTable.getSelectionModel();
37. ListSelectionModel colSelMod = JTable.getColumnModel().getSelectionModel();
38. JTree.getModel().addTreeModelListener(new TreeModelListener())
39. Move the last visible column so it becomes the first visible column
40. the last column is moved to the first position
41. 在一个表格允许用户调整列
42. 检索表中可见单元格的值
43. 从模型中检索表中的数据
44. Change a cell in the 2nd visible column
45. Change a cell in the 3rd column in the model
46. 在非可卷动的表格显示表头
47. 在一个表格改变列名称
48. 在表头显示图标
49. Implementing Variable-Height Column Headers in a JTable Component
50. Removing the Column Headers from a Scrollable in a JTable Component
51. Creating a Custom Column Header Renderer in a JTable Component
52. Setting Column Header Tool Tips in a JTable Components
53. 对表格单元格组件设置工具提示
54. 在表格使行默认选择
55. 在表格设置有效列
56. 选择表格单元格
57. 得到默认的选择模式: MULTIPLE_INTERVAL_SELECTION
58. 只允许单一选择
59. Allow selection to span one contiguous set of rows, visible columns, or block of cells
60. Allow multiple selections of rows, visible columns, or cell blocks (default)
61. 选择一个列
62. 选择一个系列
63. 取消一系列栏的选择
64. 选中某行-列0
65. 选择一个额外的一系列行
66. 取消一系列行的选择
67. 选择一个单元格:单元格( 2,1 )
68. 将选定内容扩展到包括所有单元格( 5,3 )
69. Deselect a cell: cell (3,2), All cells in the row and column containing (3,2) are deselected.
70. Toggles the selection state, if it were called again, it exactly reverses the first call.
71. 选择所有单元格
72. 取消所有单元格
73. Column selection is enabled, get the indices of the selected columns
74. Row selection is enabled, Get the indices of the selected rows
75. 活动被选定行的索引
76. 获得最大和最小范围内选定的单元格
77. Check each cell in the min and max ranges of selected cells
78. 在一个表格禁用选则
79. 获得选中的表单元格
80. 建立一个可滚动表格
81. Disable auto resizing to make the table horizontal scrollable
82. 确定是否一个单元格可见
83. 使表格中的单元格可见
84. 滚动单元格
85. 显示横向和纵向网格线(默认)
86. 不显示任何网格线
87. 只显示垂直网格线
88. 只显示水平网格线
89. 设置网格颜色
90. 获取表格组件单元格之间间隙的大小
91. 在单元格的左右添加空格
92. 增加行高
93. Programmatically Starting Cell Editing in a JTable Component
94. Save the current value in the cell being edited and stops the editing process
95. Discard any changes made by the user and stops the editing process
96. 禁用用户编辑表格
97. 禁用用户编辑表格与DefaultTableModel
98. 基于列在一个表格排序列
99. 表格排序列
100. 表格组件选择事件监听
101. Listening for Changes to the Rows and Columns of a JTable Component
102. 在一个表格监听列相关的变化事件
103. Listening for Clicks on a Column Header in a JTable Component
104. 排序和筛选表
105. 使用regexFilter过滤表
106. 设置表格行高度
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.