環境準備 Eclipse は Pleiades の Neon です。Swing を使用する為の WindowBuilder のインストールとプロジェクト作成は、▼ 以下のリンク先を参照して下さい。 Pleiades All in One(NEON) で、Windows アプリを作成する手順( WindowBuilder + Swing デザイナー or SWT デザイナー[JFace] ) WEB へのアクセスは okhttp を使用します。ライブラリは MAVEN で取り込みます。okhttp は okio に依存しますが、リポジトリのファイルが壊れている場合は、okio の dependency も記述して、旧バージョンを順に試すといいでしょう。 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>WinApp</groupId>
<artifactId>WinApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.8.0</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
MAVEN プロジェクトへの変更は、プロジェクトを右クリックして『構成』から、選択できます JTable は表示のみ対応した、JTableUnit と言うクラスを作成して使用しています。 JTableUnit
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class JTableUnit extends JTable {
private JScrollPane _scrollPane;
public JTableUnit( ) {
super();
_scrollPane = new JScrollPane(this);
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
public JScrollPane getScrollPane() {
return _scrollPane;
}
// ********************
// 初期化
// ********************
public void reset() {
DefaultTableModel dtm = (DefaultTableModel) this.getModel();
dtm.setRowCount(0);
int cols = this.getColumnCount();
for( int i = cols-1; i >= 0; i-- ) {
this.removeColumn((this.getColumnModel()).getColumn(i));
}
// データモデルも初期化
dtm.setColumnCount(0);
}
// ********************
// 行を全て削除
// ********************
public void clear(){
DefaultTableModel dtm = (DefaultTableModel) this.getModel();
dtm.setRowCount(0);
}
public void addColumn(String name) {
DefaultTableModel dtm = (DefaultTableModel) this.getModel();
dtm.addColumn(name);
}
public void setColumnTitle(String name,String title) {
TableColumn tc = this.getColumn(name);
tc.setHeaderValue(title);
tc.setIdentifier(name);
}
public void addRow() {
DefaultTableModel dtm = (DefaultTableModel) this.getModel();
Object[] obj = null;
dtm.addRow(obj);
}
public void setColumn(int row, int col, String data) {
this.setValueAt( data, row, col );
}
}
前提条件 CSV は、ローカル・WEB 共に shift_jis です。 WEB 上のデータは https://lightbox.sakura.ne.jp/demo/json/syain_csv.php です。 処理
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Main extends JFrame {
private JPanel contentPane;
private JTableUnit table;
private JPanel panel;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1000, 700);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton buttonLocal = new JButton("ローカルCSV読込み");
buttonLocal.setBounds(10, 10, 150, 21);
buttonLocal.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadCsv();
}
});
contentPane.add(buttonLocal);
JButton buttonWeb = new JButton("WEBCSV読込み");
buttonWeb.setBounds(172, 10, 150, 21);
buttonWeb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadWebCsv();
}
});
contentPane.add(buttonWeb);
JButton buttonClear = new JButton("行クリア");
buttonClear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
table.clear();
}
});
buttonClear.setBounds(334, 10, 150, 21);
contentPane.add(buttonClear);
panel = new JPanel();
panel.setBounds(12, 52, 960, 600);
panel.setLayout(new BorderLayout(0, 0));
contentPane.add(panel);
table = new JTableUnit();
panel.add(table.getScrollPane());
}
// *************************
// ローカルCSV読込み
// *************************
private void loadCsv(){
table.reset();
try {
FileInputStream fis = new FileInputStream("C:\\Users\\lightbox\\Documents\\社員.csv");
InputStreamReader isr = new InputStreamReader(fis, "MS932");
BufferedReader br = new BufferedReader(isr);
String cols_string;
String[] col_data = null;
int line_count = 0;
while ( null != (cols_string = br.readLine() ) ) {
// 空行を無視する
if (cols_string.equals("")) {
continue;
}
// 初回( タイトル部分 )
if ( col_data == null ) {
col_data = cols_string.split(",");
// addColumn と setColumnTitle は別々に実行する必要があります
for( int i = 0; i < col_data.length; i++ ) {
// カラムの ID を定義しています
table.addColumn(String.format("col%d", i) );
}
for( int i = 0; i < col_data.length; i++ ) {
// カラムの ID に対してタイトル文字列をセットしています
table.setColumnTitle(String.format("col%d", i), col_data[i] );
}
continue;
}
// 2回目以降( データ部分 )
col_data = cols_string.split(",");
// 空行の追加
table.addRow();
for( int i = 0; i < col_data.length; i++ ) {
// 行, カラム でデータをセット
table.setColumn(line_count, i, col_data[i] );
}
line_count++;
}
br.close();
isr.close();
fis.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
// *************************
// WEBCSV読込み
// *************************
private void loadWebCsv(){
table.reset();
String url = "https://lightbox.sakura.ne.jp/demo/json/syain_csv.php";
String result ="[\"error\"]";
OkHttpClient client = new OkHttpClient();
Request.Builder builder = new Request.Builder();
builder.url(url);
Request request = builder.build();
Response response = null;
try {
response = client.newCall(request).execute();
result = response.body().string();
}
catch (IOException e) {
e.printStackTrace();
}
String[] row_data = result.split("\n");
String[] col_data = null;
int line_count = 0;
for( String cols_string : row_data ) {
// 空行を無視する
if (cols_string.equals("")) {
continue;
}
// 初回( タイトル部分 )
if ( col_data == null ) {
col_data = cols_string.split(",");
for( int i = 0; i < col_data.length; i++ ) {
// カラムの ID を定義しています
table.addColumn(String.format("col%d", i) );
}
for( int i = 0; i < col_data.length; i++ ) {
// カラムの ID に対してタイトル文字列をセットしています
table.setColumnTitle(String.format("col%d", i), col_data[i] );
}
continue;
}
// 2回目以降( データ部分 )
col_data = cols_string.split(",");
// 空行の追加
table.addRow();
col_data = cols_string.split(",");
for( int i = 0; i < col_data.length; i++ ) {
// 行, カラム でデータをセット
table.setColumn(line_count, i, col_data[i] );
}
line_count++;
}
}
}
画面にデザイナで Panel を作成しておいて、JScrollPane 込みで作成されている JTableUnit を Panel に組み込んでいます(82、83 行)。 okhttp での キャラクタセットは、サーバ側から送られた Content-Type を元に response.body().string() 実行時に自動変換されます。
|
|
【java : Swingの最新記事】
- Java + Swing : JTable に CSV フォーマットのテキストファイルを読み込む
- Swing の JTable に 1) WEBのJSON2次元配列。2) WEB の JSON配列 を取り込んで表示する( Google Gson と okhttp を使用 )
- Java : JDialog で モーダルダイアログ
- Eclipse( Pleiades ) Helios に、VisualEditor をインストールして、JFrame で実行するまでの全手順画像
- Java : InputMap を使って JFrame 上のキーを全て処理する
- Java : WEB 上の XML を JTable に表示


環境準備
Eclipse は Pleiades の Neon です。Swing を使用する為の WindowBuilder のインストールとプロジェクト作成は、▼ 以下のリンク先を参照して下さい。




