Java Swing でテキストエリア テーブルの例を作ってみました。
csv っぽい形式で JTextArea 入力されているデータを JTable に読み込んだり、JTable のデータを csv っぽい形式に掃き出す事ができます。
ポイント
最初に作成した JTable クラス型のオブジェクト tableFirst
に new JTable(data)
等を代入しても、テーブルの更新ができません。
JTable tableFirst = new JTable(datamatrixFirst, colnameFirst);
tableFirst = new JTable(datamatrixSecond, colnameSecond);
TableModel クラス型のオブジェクト tableModel
で初期化し、tableModel
の方を setDataVector
メソッドで編集してあげると、テーブルがちゃんと更新されます。
DefaultTableModel tableModel =
new DefaultTableModel(datamatrixFirst, colnameFirst);
JTable tableFirst = new JTable(tableModel);
tableModel.setDataVector(datamatrixSecond, colnameSecond);
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTable;
import java.awt.Rectangle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;
public class myTable {
@param args
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
myTable application = new myTable();
application.getJFrame().setVisible(true);
}
});
}
private String[] colName = {"x", "pdf", "cdf"};
private Double[][] dataMatrix = {
{ -3.0, 0.00443, 0.00443},
{ -2.5, 0.01753, 0.01753},
{ -2.0, 0.05399, 0.05399},
{ -1.5, 0.12952, 0.12952},
{ -1.0, 0.24197, 0.24197},
{ -0.5, 0.35207, 0.35207},
{ 0.0, 0.39894, 0.39894},
{ 0.5, 0.35207, 0.35207},
{ 1.0, 0.24197, 0.24197},
{ 1.5, 0.12952, 0.12952},
{ 2.0, 0.05399, 0.05399},
{ 2.5, 0.01753, 0.01753},
{ 3.0, 0.00443, 0.00443}
};
private JTable dataTable = null;
private JButton jButtonTable2Text = null;
private JButton jButtonText2Table = null;
private JPanel jContentPane = null;
private JFrame jFrame = null;
private JScrollPane jScrollPane = null;
private JScrollPane jScrollPaneTextArea = null;
public DefaultTableModel tableModel =
new DefaultTableModel(dataMatrix, colName);
public JTextArea tableText = null;
This method initializes dataTable
@return
private JTable getDataTable() {
if (dataTable == null) {
dataTable = new JTable(tableModel);
}
return dataTable;
}
This method initializes jButtonTable2Text
@return
private JButton getJButtonTable2Text() {
if (jButtonTable2Text == null) {
jButtonTable2Text = new JButton();
jButtonTable2Text.setBounds(new Rectangle(315, 135, 61, 31));
jButtonTable2Text.setText("←");
jButtonTable2Text.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
textUpdate();
}
});
}
return jButtonTable2Text;
}
This method initializes jButtonText2Table
@return
private JButton getJButtonText2Table() {
if (jButtonText2Table == null) {
jButtonText2Table = new JButton();
jButtonText2Table.setBounds(new Rectangle(315, 90, 61, 31));
jButtonText2Table.setText("→");
jButtonText2Table.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
tableUpdate();
}
});
}
return jButtonText2Table;
}
This method initializes jContentPane
@return
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJScrollPane(), null);
jContentPane.add(getJButtonText2Table(), null);
jContentPane.add(getJButtonTable2Text(), null);
jContentPane.add(getJScrollPaneTextArea(), null);
textUpdate();
}
return jContentPane;
}
This method initializes jFrame
@return
private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(684, 283);
jFrame.setContentPane(getJContentPane());
jFrame.setTitle("Application");
}
return jFrame;
}
This method initializes jScrollPane
@return
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setBounds(new Rectangle(390, 15, 271, 226));
jScrollPane.setViewportView(getDataTable());
}
return jScrollPane;
}
This method initializes jScrollPaneTextArea
@return
private JScrollPane getJScrollPaneTextArea() {
if (jScrollPaneTextArea == null) {
jScrollPaneTextArea = new JScrollPane();
jScrollPaneTextArea.setBounds(new Rectangle(15, 15, 286, 226));
jScrollPaneTextArea.setViewportView(getTableText());
}
return jScrollPaneTextArea;
}
This method initializes tableText
@return
private JTextArea getTableText() {
if (tableText == null) {
tableText = new JTextArea();
}
return tableText;
}
private void tableUpdate() {
BufferedReader textInput = new BufferedReader(new StringReader(
tableText.getText()
));
ArrayList<String[]> list = new ArrayList<String[]>();
String line = null;
String[] arrayline = null;
try {
while ((line = textInput.readLine()) != null) {
arrayline = line.split(",");
list.add(arrayline);
}
textInput.close();
String[] colName = list.get(0);
list.remove(0);
String[][] dataMatrix = list.toArray(new String[0][0]);
tableModel.setDataVector(dataMatrix, colName);
} catch (IOException e) {
}
}
private void textUpdate() {
String textUpdated = "";
for (int j = 0; j < tableModel.getColumnCount(); j++) {
if (j != tableModel.getColumnCount() - 1) {
textUpdated =
textUpdated + tableModel.getColumnName(j) + ",";
} else {
textUpdated =
textUpdated + tableModel.getColumnName(j) + "\n";
}
}
for (int i = 0; i < tableModel.getRowCount(); i++) {
for (int j = 0; j < tableModel.getColumnCount(); j++) {
if (j != tableModel.getColumnCount() - 1) {
textUpdated =
textUpdated + tableModel.getValueAt(i, j) + ",";
} else {
textUpdated =
textUpdated + tableModel.getValueAt(i, j) + "\n";
}
}
}
tableText.setText(textUpdated);
}
}