<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_by_API%2Fjavax.swing.table%2FAbstractTableModel</id>
		<title>Java by API/javax.swing.table/AbstractTableModel - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_by_API%2Fjavax.swing.table%2FAbstractTableModel"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.table/AbstractTableModel&amp;action=history"/>
		<updated>2026-04-27T13:48:28Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.table/AbstractTableModel&amp;diff=466&amp;oldid=prev</id>
		<title> в 17:43, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.table/AbstractTableModel&amp;diff=466&amp;oldid=prev"/>
				<updated>2010-05-31T17:43:48Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:43, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.table/AbstractTableModel&amp;diff=467&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_by_API/javax.swing.table/AbstractTableModel&amp;diff=467&amp;oldid=prev"/>
				<updated>2010-05-31T14:17:11Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== AbstractTableModel: fireTableRowsUpdated(int firstRow, int lastRow)  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.table.AbstractTableModel;&lt;br /&gt;
public class MainClass extends JFrame {&lt;br /&gt;
  public MainClass() {&lt;br /&gt;
    super(&amp;quot;Dynamic Data Test&amp;quot;);&lt;br /&gt;
    setSize(300, 200);&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    JTable jt = new JTable(new MarketDataModel(5));&lt;br /&gt;
    JScrollPane jsp = new JScrollPane(jt);&lt;br /&gt;
    getContentPane().add(jsp, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    MainClass mt = new MainClass();&lt;br /&gt;
    mt.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MarketDataModel extends AbstractTableModel implements Runnable {&lt;br /&gt;
  Thread runner;&lt;br /&gt;
  public MarketDataModel(int initialDelay) {&lt;br /&gt;
    Thread runner = new Thread(this);&lt;br /&gt;
    runner.start();&lt;br /&gt;
  }&lt;br /&gt;
  double[] data = new double[]{1,2,3,4,5};&lt;br /&gt;
  &lt;br /&gt;
  String[] headers = { &amp;quot;Symbol&amp;quot;, &amp;quot;Price&amp;quot;, &amp;quot;Change&amp;quot;, &amp;quot;Last updated&amp;quot; };&lt;br /&gt;
  public int getRowCount() {&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  public int getColumnCount() {&lt;br /&gt;
    return headers.length;&lt;br /&gt;
  }&lt;br /&gt;
  public String getColumnName(int c) {&lt;br /&gt;
    return headers[c];&lt;br /&gt;
  }&lt;br /&gt;
  public Object getValueAt(int r, int c) {&lt;br /&gt;
    return data[c];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void updateStocks() {&lt;br /&gt;
    for (int i = 0; i &amp;lt; data.length; i++) {&lt;br /&gt;
      data[i] = Math.random();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      updateStocks();&lt;br /&gt;
      fireTableRowsUpdated(0, data.length - 1);&lt;br /&gt;
      try {&lt;br /&gt;
        Thread.sleep(1000);&lt;br /&gt;
      } catch (InterruptedException ie) {&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== extends AbstractTableModel ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.table.AbstractTableModel;&lt;br /&gt;
import javax.swing.table.TableModel;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(final String args[]) {&lt;br /&gt;
    final Object rows[][] = { { &amp;quot;one&amp;quot;, &amp;quot;1&amp;quot; }, { &amp;quot;two&amp;quot;, &amp;quot;2&amp;quot; },&lt;br /&gt;
        { &amp;quot;three&amp;quot;, &amp;quot;3&amp;quot; } };&lt;br /&gt;
    final String headers[] = { &amp;quot;English&amp;quot;, &amp;quot;Digit&amp;quot; };&lt;br /&gt;
    &lt;br /&gt;
    TableModel fixedColumnModel = new AbstractTableModel() {&lt;br /&gt;
      public int getColumnCount() {&lt;br /&gt;
        return 2;&lt;br /&gt;
      }&lt;br /&gt;
      public String getColumnName(int column) {&lt;br /&gt;
        return headers[column];&lt;br /&gt;
      }&lt;br /&gt;
      public int getRowCount() {&lt;br /&gt;
        return 3;&lt;br /&gt;
      }&lt;br /&gt;
      public Object getValueAt(int row, int column) {&lt;br /&gt;
        return rows[row][column];&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Scrollless Table&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    JTable table = new JTable(fixedColumnModel);&lt;br /&gt;
    &lt;br /&gt;
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);&lt;br /&gt;
    &lt;br /&gt;
    frame.add(new JScrollPane(table), BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 150);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== extends AbstractTableModel (Custom class type) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.table.AbstractTableModel;&lt;br /&gt;
public class MainClass extends JFrame {&lt;br /&gt;
  public MainClass() {&lt;br /&gt;
    super(&amp;quot;Custom TableModel Test&amp;quot;);&lt;br /&gt;
    setSize(300, 200);&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    FileModel fm = new FileModel();&lt;br /&gt;
    JTable jt = new JTable(fm);&lt;br /&gt;
    jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);&lt;br /&gt;
    jt.setColumnSelectionAllowed(true);&lt;br /&gt;
    JScrollPane jsp = new JScrollPane(jt);&lt;br /&gt;
    getContentPane().add(jsp, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    MainClass ft = new MainClass();&lt;br /&gt;
    ft.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class FileModel extends AbstractTableModel {&lt;br /&gt;
  String titles[] = new String[] { &amp;quot;Directory?&amp;quot;, &amp;quot;File Name&amp;quot;, &amp;quot;Read?&amp;quot;, &amp;quot;Write?&amp;quot;, &amp;quot;Size&amp;quot;,&lt;br /&gt;
      &amp;quot;Last Modified&amp;quot; };&lt;br /&gt;
  Class types[] = new Class[] { Boolean.class, String.class, Boolean.class, Boolean.class,&lt;br /&gt;
      Number.class, Date.class };&lt;br /&gt;
  Object data[][];&lt;br /&gt;
  public FileModel() {&lt;br /&gt;
    this(&amp;quot;.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public FileModel(String dir) {&lt;br /&gt;
    File pwd = new File(dir);&lt;br /&gt;
    setFileStats(pwd);&lt;br /&gt;
  }&lt;br /&gt;
  public int getRowCount() {&lt;br /&gt;
    return data.length;&lt;br /&gt;
  }&lt;br /&gt;
  public int getColumnCount() {&lt;br /&gt;
    return titles.length;&lt;br /&gt;
  }&lt;br /&gt;
  public String getColumnName(int c) {&lt;br /&gt;
    return titles[c];&lt;br /&gt;
  }&lt;br /&gt;
  public Class getColumnClass(int c) {&lt;br /&gt;
    return types[c];&lt;br /&gt;
  }&lt;br /&gt;
  public Object getValueAt(int r, int c) {&lt;br /&gt;
    return data[r][c];&lt;br /&gt;
  }&lt;br /&gt;
  public void setFileStats(File dir) {&lt;br /&gt;
    String files[] = dir.list();&lt;br /&gt;
    data = new Object[files.length][titles.length];&lt;br /&gt;
    for (int i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
      File tmp = new File(files[i]);&lt;br /&gt;
      data[i][0] = new Boolean(tmp.isDirectory());&lt;br /&gt;
      data[i][1] = tmp.getName();&lt;br /&gt;
      data[i][2] = new Boolean(tmp.canRead());&lt;br /&gt;
      data[i][3] = new Boolean(tmp.canWrite());&lt;br /&gt;
      data[i][4] = new Long(tmp.length());&lt;br /&gt;
      data[i][5] = new Date(tmp.lastModified());&lt;br /&gt;
    }&lt;br /&gt;
    fireTableDataChanged();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== extends AbstractTableModel (read database table to a JTable) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.DriverManager;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.ResultSetMetaData;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTable;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.table.AbstractTableModel;&lt;br /&gt;
public class MainClass extends JFrame {&lt;br /&gt;
  JTextField hostField;&lt;br /&gt;
  JTextField queryField;&lt;br /&gt;
  QueryTableModel qtm = new QueryTableModel();&lt;br /&gt;
  public MainClass() {&lt;br /&gt;
    setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    setSize(350, 200);&lt;br /&gt;
    JTable table = new JTable(qtm);&lt;br /&gt;
    JScrollPane scrollpane = new JScrollPane(table);&lt;br /&gt;
    JPanel commandPanel = new JPanel();&lt;br /&gt;
    commandPanel.setLayout(new GridLayout(3, 2));&lt;br /&gt;
    commandPanel.add(new JLabel(&amp;quot;Enter the Host URL: &amp;quot;));&lt;br /&gt;
    commandPanel.add(hostField = new JTextField());&lt;br /&gt;
    commandPanel.add(new JLabel(&amp;quot;Enter your query: &amp;quot;));&lt;br /&gt;
    commandPanel.add(queryField = new JTextField());&lt;br /&gt;
    commandPanel.add(new JLabel(&amp;quot;Click here to send: &amp;quot;));&lt;br /&gt;
    JButton jb = new JButton(&amp;quot;Search&amp;quot;);&lt;br /&gt;
    jb.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        qtm.setHostURL(hostField.getText().trim());&lt;br /&gt;
        qtm.setQuery(queryField.getText().trim());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    commandPanel.add(jb);&lt;br /&gt;
    getContentPane().add(commandPanel, BorderLayout.NORTH);&lt;br /&gt;
    getContentPane().add(scrollpane, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    MainClass tt = new MainClass();&lt;br /&gt;
    tt.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class QueryTableModel extends AbstractTableModel {&lt;br /&gt;
  Vector cache;&lt;br /&gt;
  int colCount;&lt;br /&gt;
  String[] headers;&lt;br /&gt;
  Connection db;&lt;br /&gt;
  Statement statement;&lt;br /&gt;
  String currentURL;&lt;br /&gt;
  public QueryTableModel() {&lt;br /&gt;
    cache = new Vector();&lt;br /&gt;
  }&lt;br /&gt;
  public String getColumnName(int i) {&lt;br /&gt;
    return headers[i];&lt;br /&gt;
  }&lt;br /&gt;
  public int getColumnCount() {&lt;br /&gt;
    return colCount;&lt;br /&gt;
  }&lt;br /&gt;
  public int getRowCount() {&lt;br /&gt;
    return cache.size();&lt;br /&gt;
  }&lt;br /&gt;
  public Object getValueAt(int row, int col) {&lt;br /&gt;
    return ((String[]) cache.elementAt(row))[col];&lt;br /&gt;
  }&lt;br /&gt;
  public void setHostURL(String url) {&lt;br /&gt;
    if (url.equals(currentURL)) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    closeDB();&lt;br /&gt;
    initDB(url);&lt;br /&gt;
    currentURL = url;&lt;br /&gt;
  }&lt;br /&gt;
  public void setQuery(String q) {&lt;br /&gt;
    cache = new Vector();&lt;br /&gt;
    try {&lt;br /&gt;
      ResultSet rs = statement.executeQuery(q);&lt;br /&gt;
      ResultSetMetaData meta = rs.getMetaData();&lt;br /&gt;
      colCount = meta.getColumnCount();&lt;br /&gt;
      headers = new String[colCount];&lt;br /&gt;
      for (int h = 1; h &amp;lt;= colCount; h++) {&lt;br /&gt;
        headers[h - 1] = meta.getColumnName(h);&lt;br /&gt;
      }&lt;br /&gt;
      while (rs.next()) {&lt;br /&gt;
        String[] record = new String[colCount];&lt;br /&gt;
        for (int i = 0; i &amp;lt; colCount; i++) {&lt;br /&gt;
          record[i] = rs.getString(i + 1);&lt;br /&gt;
        }&lt;br /&gt;
        cache.addElement(record);&lt;br /&gt;
      }&lt;br /&gt;
      fireTableChanged(null);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      cache = new Vector();&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void initDB(String url) {&lt;br /&gt;
    try {&lt;br /&gt;
      Class.forName(&amp;quot;your driver class&amp;quot;);&lt;br /&gt;
      db = DriverManager.getConnection(url);&lt;br /&gt;
      statement = db.createStatement();&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.out.println(&amp;quot;Could not initialize the database.&amp;quot;);&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void closeDB() {&lt;br /&gt;
    try {&lt;br /&gt;
      if (statement != null) {&lt;br /&gt;
        statement.close();&lt;br /&gt;
      }&lt;br /&gt;
      if (db != null) {&lt;br /&gt;
        db.close();&lt;br /&gt;
      }&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.out.println(&amp;quot;Could not close the current connection.&amp;quot;);&lt;br /&gt;
      e.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>