ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
WindowBuilder + JTable : インターネットの2次元配列の JSON を読み込んで表示
日時: 2017/05/30 20:14
名前: lightbox





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  );
	}
	
}
メンテナンス

pom.xml ( No.1 )
日時: 2017/05/30 20:15
名前: lightbox


日時: 2017/05/30 20:15
名前: lightbox
<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.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.0</version>
    </dependency>
    <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>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス