コメント |
@SHOW
https://lightbox.sakura.ne.jp/demo/json/syain_array.php(JSON デ−タ)
@END
@DIV
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import com.google.gson.Gson;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Main extends JFrame {
private JPanel contentPane;
private JTable 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);
JButton btnNewButton = new JButton("読み込み");
btnNewButton.setBounds(10, 10, 91, 21);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadData();
}
});
contentPane.setLayout(null);
contentPane.add(btnNewButton);
panel = new JPanel();
panel.setBorder(new LineBorder(new Color(0, 0, 0)));
panel.setBounds(12, 52, 960, 600);
panel.setLayout(new BorderLayout(0, 0));
contentPane.add(panel);
table = new JTable() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
private void loadData(){
reset(table);
String url = "https://lightbox.sakura.ne.jp/demo/json/syain_array.php";
String result ="";
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();
}
// エラーのため何もしない
if ( result.equals("") ) {
return;
}
Gson gson = new Gson();
String[][] data = gson.fromJson(result, String[][].class);
int row_count = 0;
int col_count;
for(String[] row : data ) {
if ( row_count == 0 ) {
// 列のカラム ID を決定して列を作成
for( int i = 0; i < row.length; i++ ) {
addColumn(table, String.format("col%d", i));
}
// 各列にタイトルを設定
col_count = 0;
for( String col : row ) {
setColumnTitle(table, String.format("col%d", col_count), col);
col_count++;
}
}
else {
addRow(table);
col_count = 0;
for( String col : row ) {
// 先頭行はタイトルなので、table の行番号として排除するので
// row_count-1 となります
setColumn(table, row_count-1, col_count, col);
col_count++;
}
}
row_count++;
}
}
// ********************
// 初期化
// ********************
private void reset(JTable table) {
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
dtm.setRowCount(0);
int cols = table.getColumnCount();
for( int i = cols-1; i >= 0; i-- ) {
table.removeColumn((table.getColumnModel()).getColumn(i));
}
// データモデルも初期化
dtm.setColumnCount(0);
}
// ********************
// 行を全て削除
// ********************
private void clear(JTable table){
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
dtm.setRowCount(0);
}
private void addColumn(JTable table, String name) {
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
dtm.addColumn(name);
}
private void setColumnTitle(JTable table, String name,String title) {
TableColumn tc1 = table.getColumn(name);
tc1.setHeaderValue(title);
tc1.setIdentifier(name);
}
private void addRow(JTable table) {
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
Object[] obj = null;
dtm.addRow(obj);
}
private void setColumn(JTable table,int row,int col, String data) {
table.setValueAt( data, row, col );
}
}
@END |