[Top ページ] [他のサンプル]

JTableSample.java


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
 

public class JTableSample extends JApplet {
	private MyTableModel model_ = new MyTableModel();
	
	public JTableSample() {
		// -----------------------------------------------------------------
		// UI コンポーネント
		// -----------------------------------------------------------------
		setLayout(new BorderLayout());
		// テーブル
		JTable table = new JTable(model_);
		add(new JScrollPane(table), BorderLayout.CENTER);
		
		// テーブルにデータを追加するためのUI
		JPanel panel = new JPanel();
		final JTextField txt1 = new JTextField("1", 8);
		final JTextField txt2 = new JTextField("2", 8);
		final JTextField txt3 = new JTextField("3", 8);
		JButton btnAdd = new JButton("Add");
		panel.add(txt1);
		panel.add(txt2);
		panel.add(txt3);
		panel.add(btnAdd);
		add(panel, BorderLayout.NORTH);
		
		btnAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model_.addRowData(new String[] { txt1.getText(), txt2.getText(), txt3.getText() });
			}
		});
		
		// -----------------------------------------------------------------
		// テーブルのデータ
		// -----------------------------------------------------------------
		model_.addRowData(new String[] { "1行目の1", "1行目の2", "1行目の3" });
		model_.addRowData(new String[] { "2行目の1", "2行目の2", "2行目の3" });
	}
	
	/**
	 * Table のデータを管理するクラス
	 */
	private static class MyTableModel extends AbstractTableModel {
		private String[] columnNames_ = { "Col1", "Col2", "Col3" };
		private ArrayList<String[]> dataList_ = new ArrayList<String[]>();
		
		public String getColumnName(int columnIndex) {
			return columnNames_[columnIndex];
		}
		
		public int getRowCount() {
			return dataList_.size();
		}
		
		public int getColumnCount() {
			return columnNames_.length;
		}
		
		public Object getValueAt(int rowIndex, int columnIndex) {
			String[] rowData = dataList_.get(rowIndex);
			return rowData[columnIndex];
		}
		
		/**
		 * 1行データを追加します。
		 * @param rowData 行データ
		 */
		public void addRowData(String[] rowData) {
			dataList_.add(rowData);
			// view (テーブル) にデータが追加されたことを通知する。
			fireTableRowsInserted(dataList_.size() - 1, dataList_.size() - 1);
		}
	}
	
	// -----------------------------------------------------------------------------------
	// UIの見栄えを OS にあわせる
	// -----------------------------------------------------------------------------------
	static {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch(Exception e) {}
	}
}