【VB.net/C#】OleDbによるcsvファイルをDataGlidViewに表示するプログラム

開発環境 VisualStudio2017
OS Windows10
フレームワーク .NET Framework 4.7.2

DataGridViewをFormにドッキングさせる方法

ドッキング方法はプロパティでDataGridViewを選択すると
デザインビューでDataGridViewがアクティブになり
右上に三角マークが出るのでこれをクリック
「DataGridViewのタスク」のダイアログが出るので
下にある「親コンテナーにドッキングする」をクリック
するとメニューを除くフォームの大きさになる

命名規則とプロパティ設定値

MenuStrip  mnuStrip
OpenFileDialog  ofdCsv  ofdCsv.Filter=Csvファイル|*.csv
ToolStripMenuItem CsvOpenToolStripMenuItem CsvOpenToolStripMenuItem.Text=Csvファイルを開く
DataGridView  dgvCsv
DataSet   oDS
DataTable  oTB
DataGridViewColumn oColumn
OleDb.OleDbConnection oCon
OleDb.OleDbCommand() oCommand
OleDb.OleDbDataAdapter oDataAdapter

VB.netコード

Public Class frmCsv
    Private Sub CsvOpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CsvOpenToolStripMenuItem.Click
        ofdCsv.ShowDialog()
    End Sub
    Private Sub ofdCsv_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ofdCsv.FileOk
        Dim sHeader As String
        If MsgBox("ヘッダー(1行目)にタイトルを含みますか?", MsgBoxStyle.YesNo, "ヘッダーの有無指定") = MsgBoxResult.Yes Then
            sHeader = "YES"
        Else
            sHeader = "NO"
        End If
        Dim oCon As New OleDb.OleDbConnection
        Dim oCommand As New OleDb.OleDbCommand()
        Try
            Dim sFileName As String = ofdCsv.SafeFileName
            Dim sFilePath As String = Strings.Left(ofdCsv.FileName, Len(ofdCsv.FileName) - Len(sFileName))
            Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFilePath & ";Extended Properties='Text;HDR=" & sHeader & ";FMT=CSVDelimited';"
            Dim oDataSet As New DataSet
            Dim oDataAdapter As New OleDb.OleDbDataAdapter
            Dim oDataTable As DataTable = New DataTable
            oCon.ConnectionString = sConnectionString
            oCommand.Connection = oCon
            oCommand.CommandText = "SELECT * FROM [" & sFileName & "]"
            oDataAdapter.SelectCommand = oCommand
            oDataSet.Clear()
            oDataAdapter.Fill(oDataTable)
            dgvCsv.DataSource = oDataTable
            Dim oColumn As DataGridViewColumn
            For Each oColumn In dgvCsv.Columns
                oColumn.SortMode = DataGridViewColumnSortMode.NotSortable
            Next
        Catch ex As Exception
            Debug.Write(ex.Message)
        Finally
            If Not Command() Is Nothing Then oCommand.Dispose()
            If Not oCon Is Nothing Then oCon.Dispose()
        End Try
    End Sub
End Class

C#コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb; //←追加
namespace CsvViewCSharp
{
    public partial class frmCsv : Form
    {
        public frmCsv()
        {
            InitializeComponent();
        }
        private void CsvOpenFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ofdCsv.ShowDialog();
        }
        private void ofdCsv_FileOk(object sender, CancelEventArgs e)
        {
            bool bIsHeader = MessageBox.Show("ヘッダー(1行目)にタイトルを含みますか?", "ヘッダーの有無指定", MessageBoxButtons.YesNo) == DialogResult.Yes;
            string sHeader = bIsHeader ? "YES" : "NO";
            string sFileName = ofdCsv.SafeFileName;
            string sFilePath = ofdCsv.FileName.Substring(0, ofdCsv.FileName.Length - sFileName.Length);
            string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";Extended Properties='Text;HDR=" + sHeader + ";FMT=CSVDelimited';";
            OleDbConnection oCon = new OleDbConnection(sConnectionString);
            OleDbCommand oCommand = new OleDbCommand("SELECT * FROM [" + sFileName + "]", oCon);
            OleDbDataAdapter oDataAdapter = new OleDbDataAdapter(oCommand);
            DataSet oDataset = new DataSet();
            DataTable oDataTable = new DataTable();
            oDataset.Clear();
            oDataAdapter.Fill(oDataTable);
            dgvCsv.DataSource = oDataTable;
            foreach (DataGridViewColumn oColumn in dgvCsv.Columns)
            {
                oColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
            }
            if (oCommand != null)
            {
                oCommand.Dispose();
            }
            if(oCon != null)
            {
                oCon.Dispose();
            }
        }
    }
}

【Java】ログインデータ管理プログラム【csv】

import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.*;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.LinkedList;
class ConsoleLoginEntry{
  public static final String csLoginRootPath = "";
  public static final String csLoginFilePath = "LoginData.csv";
  public static void main(String args[]){
    File ofLogin = new File(csLoginRootPath + csLoginFilePath);
    if (ofLogin.exists()){
      //System.out.println("ファイルは存在します");
    }else{
      System.out.println("ファイルが存在しません");
      System.out.println("ファイルを作成しますか?(Y)");
      try{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String sYesNo = br.readLine();
        if(sYesNo.equals("Y")){
          if(!ofLogin.createNewFile()){
            System.out.println("ファイルを作成できませんでした 終了します");
            return;
          }
        }else{
          System.out.println("終了します");
          return;
        }
      }catch(IOException e){
        System.out.println("Exception :" + e);
      }
    }
    String sID = "";
    String sPassWord = "";
    boolean bId = false;
    //IDの入力検査
    try{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.print("IDを入力してください   ⇒  ");
      sID = br.readLine();
      sID = sID.trim();
      if(sID.equals("")){
        System.out.println("IDが入力されませんでした 終了します");
        return;
      }
      if(sID.indexOf(',') > -1){
        System.out.println("IDに','(カンマ)文字を使う事はできません");
        return;
      }
    }catch(IOException e){
      System.out.println("Exception :" + e);
    }
    
    //ログイン情報ファイル
    if (ofLogin.exists()){
      try{
        BufferedReader brFile = new BufferedReader(new FileReader(ofLogin));
        List<String[]> csv = new ArrayList<String[]>();
        String str = brFile.readLine();
        while (str != null) {
          csv.add(str.split(","));
          str = brFile.readLine();
        }
        brFile.close();
        bingo:
        for(String[] line : csv) {
          String s[] = line[0].split(",");          
          if (sID.equals(s[0])){
            bId = true;
            break bingo;
          }
        }
      }catch(IOException e){
        System.out.println("Exception :" + e);
      }
      //パスワードの変更可否
      if (bId){
        System.out.println("そのIDは既に存在します");
        System.out.println("PassWordを変更しますか?(Y) IDを削除しますか?(D)");
        try{
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          String sYesNoDelete = br.readLine();
          //パスワードのみ変更
          if(sYesNoDelete.equals("Y")){
            System.out.println("パスワードを入力して下さい");
            BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
            String sChangePassWord = br2.readLine();
            sChangePassWord = sChangePassWord.trim();
            if(sChangePassWord.equals("")){
              System.out.println("PassWordが入力されませんでした 終了します");
              return;
            }
            if(sChangePassWord.indexOf(',') > -1){
              System.out.println("PassWordに','(カンマ)文字を使う事はできません 終了します");
              return;
            }
            System.out.println("ID=" + sID + " PassWord=" + sChangePassWord);
            //変更前ログインデータを取得
            try{
              BufferedReader brFile = new BufferedReader(new FileReader(ofLogin));
              List<String[]> csv = new ArrayList<String[]>();
              String str = brFile.readLine();
              while (str != null) {
                csv.add(str.split(","));
                str = brFile.readLine();
              }
              brFile.close();
              //変更するログインデータ作成
              LinkedList<String> Newlist = new LinkedList<String>();
              for(String[] line : csv) {
                String s[] = line[0].split(",");          
                if (sID.equals(s[0])){
                  Newlist.add(sID + "," + sChangePassWord);
                }else{
                  Newlist.add(line[0] + "," + line[1]);
                }
              }
              //変更ログインデータファイル作成
              try{
                File Tempfile = new File(csLoginRootPath + "Temp.csv");
                FileWriter filewriter = new FileWriter(Tempfile);
                for (int i = 0; i < Newlist.size(); i++) {
                  filewriter.write(Newlist.get(i) + "\r\n");
                }
                filewriter.close();
                //リネームして正規ログインデータファイルにする
                ofLogin.delete();
                File fNew = new File(csLoginFilePath);
                Tempfile.renameTo(fNew);
              }catch(IOException e){
                System.out.println(e);
              }
              for (int i = 0; i < Newlist.size(); i++) {
                System.out.println(Newlist.get(i));
              }      
              System.out.println("パスワードは変更されました 終了します");
            }catch(IOException e){
              System.out.println("Exception :" + e);
            }
            return;
          //IDごと削除する
          }else if(sYesNoDelete.equals("D")){
            try{
              BufferedReader brFile = new BufferedReader(new FileReader(ofLogin));
              List<String[]> csv = new ArrayList<String[]>();
              String str = brFile.readLine();
              while (str != null) {
                csv.add(str.split(","));
                str = brFile.readLine();
              }
              brFile.close();
              //変更するログインデータ作成
              LinkedList<String> Newlist = new LinkedList<String>();
              for(String[] line : csv) {
                String s[] = line[0].split(",");          
                if (sID.equals(s[0])){
                  //Newlist.add(sID + "," + sChangePassWord);
                }else{
                  Newlist.add(line[0] + "," + line[1]);
                }
              }
              //変更ログインデータファイル作成
              try{
                File Tempfile = new File(csLoginRootPath + "Temp.csv");
                FileWriter filewriter = new FileWriter(Tempfile);
                for (int i = 0; i < Newlist.size(); i++) {
                  filewriter.write(Newlist.get(i) + "\r\n");
                }
                filewriter.close();
                //リネームして正規ログインデータファイルにする
                ofLogin.delete();
                File fNew = new File(csLoginFilePath);
                Tempfile.renameTo(fNew);
              }catch(IOException e){
                System.out.println(e);
              }
              //ログインデータ一覧を表示(確認用)
              /*
              for (int i = 0; i < Newlist.size(); i++) {
                System.out.println(Newlist.get(i));
              }
              */      
              System.out.println("正常に削除されました 終了します");
            }catch(IOException e){
              System.out.println("Exception :" + e);
            }
            return;
          }else{
            System.out.println("終了します");
          }
        }catch(IOException e){
          System.out.println("Exception :" + e);
        }
        return;
      }
    }
    //新規IDのパスワードの入力検査
    try{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.print("PassWordを入力してください   ⇒  ");
      sPassWord = br.readLine();
      sPassWord = sPassWord.trim();
      if(sPassWord.equals("")){
        System.out.println("PassWordが入力されませんでした 終了します");
        return;
      }
      if(sPassWord.indexOf(',') > -1){
        System.out.println("PassWordに','(カンマ)文字を使う事はできません 終了します");
        return;
      }
    }catch(IOException e){
      System.out.println("Exception :" + e);
    }
    //新規IDと新規パスワードを登録
    try{
      File file = new File(csLoginRootPath + csLoginFilePath);
      FileWriter filewriter = new FileWriter(file, true);
      filewriter.write(sID + ',' + sPassWord + "\r\n");
      filewriter.close();
      System.out.println("登録は完了しました 終了します");
    }catch(IOException e){
      System.out.println(e);
    }
  }
}

【Java】JDBCを使ってSQLServerに接続する【JDBC】

JDBCを使ってSQLServerに接続するのに大変苦労したので解決方法を紹介します。
因みに名前付きインスタンスのサーバーに接続しています。

環境はWindows10、Java11、JDBCドライバは7.0です。
https://www.microsoft.com/ja-JP/download/details.aspx?id=57175 

先ずソースコードは以下の通り

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnectURL {
    public static void main(String[] args) {
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        }
        catch(ClassNotFoundException e){
            e.printStackTrace();
            return;
        }
        String connectionUrl = "jdbc:sqlserver://localhost\\MSSQLSERVER2017;databaseName=Login;user=sa;password=パスワード";
        try {
            Connection con = DriverManager.getConnection(connectionUrl);
            Statement stmt = con.createStatement();
            String SQL = "SELECT TOP 10 * FROM LOGIN";
            ResultSet rs = stmt.executeQuery(SQL);
            while (rs.next()) {
                System.out.println(rs.getString("ID") + " " + rs.getString("PWD"));
            }
            rs.close();
            con.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

通常のJava環境ではドライバを認識できなかったのでEclipseでドライバを参照設定すると成功した。

しかし通常のJava環境で実現したかったのでYahoo!知恵袋で質問した所、ドライバをカレントディレクトリに展開してクラスパスをカレントディレクトリに指定せよとの回答。

展開コマンドは以下の通り

>jar -xvf mssql-jdbc-7.2.1.jre11.jar

次にクラスパスを指定してコンパイル

>javac ConnectURL.java -cp .

実行時にはクラスパスは必要ありません

>java ConnectURL

あとでわかったことですがカレントディレクトリに展開しておけばコンパイル時も実行時にもクラスパスは必要ありませんでした。

Eclipseでも同様の事が行われているかは疑問ですがどんな環境構築しているのか興味が湧きますね。しかし通常のJava開発環境で簡単に実装出来ない(ドライバを展開しなければならない)のは問題があると思います。

【JavaScript/JQuery】YTPlayerを使ってWebページの背景に動画を表示する

Webページの背景に動画を表示する方法です。

https://github.com/pupunzi/jquery.mb.YTPlayer
からダウンロードし
Distフォルダ内のj query.mb.YTPlayer.min.jsと

Dist\cssフォルダ内のjquery.mb.YTPlayer.min.css
をhtmlファイルと同じフォルダ内に置きます。

HTMLファイルは次のコードになります。

<!DOCTYPE html>
<html>
<head>
<link href="jquery.mb.YTPlayer.min.css" media="all" rel="stylesheet" type="text/css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="jquery.mb.YTPlayer.min.js"></script>
<script>
    jQuery(function(){
      var myPlayer;
      myPlayer = jQuery("#bgVideo").YTPlayer({});
    });
</script>
</head>
<body>
<!--<button onclick="jQuery('#bgVideo').YTPToggleVolume()">Mute/Unmute</button>
<button onclick="jQuery('#bgVideo').YTPFullscreen()">Fullscreen</button>-->
<input id="videoID" type="text" value="RawC-7fxME0" onfocus="$('#loadOptions').slideDown()">
<button onclick="jQuery('#bgVideo').YTPChangeMovie({videoURL: $('#videoID').val(), mute: false,stopMovieOnBlur: false,showControls: true, loop: true, autoplay: true, ratio: 16/9})">change video</button>
<div class="video" id="bgVideo" data-property="{ videoURL: 'biMO46z_VSY',containment:'body', mute: false,stopMovieOnBlur: false,showControls: true, loop: true, autoplay: true, ratio: 16/9,opacity:1,addFilters: {grayscale: 50,sepia: 80,opacity: 30}}">jquery.mb.YTPlayer</div>
</body>
</html>

初期値の動画を変更する場合はコード内のvideoURL: '***********'の*に
YouTubeの動画へのリンクを入力してください。

テキストボックスにYouTubeのリンクを入力して「change video」ボタンを
押すことで動画を変更することができます。
テキストボックスに入力する動画の指定方法は以下の3タイプが指定できます。
https://www.youtube.com/watch?v=V2rifmjZuKQ
http://youtu.be/V2rifmjZuKQ
V2rifmjZuKQ

設定やメソッドなどの詳しい情報は
https://github.com/pupunzi/jquery.mb.YTPlayer/wiki
を見てください。

因みにChromeではファイルを直接開いても再生されますが、
EdgeではWebサイトにアクセスしないと再生されません。
Edgeの場合はIISなどをインストールするなどしてWebサイトから
ファイルを呼び出して確認してください。

補足情報
以前のバージョンでは動画変更するのにはYTPChangeVideoが
使われていましたが新しいバージョンではYTPChangeMovieになりました。

参考デモページ
https://pupunzi.com/mb.components/mb.YTPlayer/demo/demo.html

【Python/Tkinter】写真を点滅させる

Python/Tkinter】写真を点滅させる
f:id:Jikoryuu:20200119175545g:plain
PILをインストールする必要があります
PILで扱える画像の種類はbmptiff、gif、jpg、pngtiffppm、pgmです

PILがインストールされてない場合はpipでインストールしてください

>pip install Pillow

※参考URL

pythonGUIでオブジェクトを点滅させたい

https://teratail.com/questions/191769

PythonGUIに画像を表示する
https://water2litter.net/rum/post/python_tkinter_canvas_create_image/

円が動くアニメーションをつくるよ!after()でタイマーを作ろう!
https://python-channel.com/1370.html

ライブラリ:PIL
https://www.lifewithpython.com/2013/09/pil.html

 

import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
root.geometry('800x560')
root.title('IMG')

class Photo(object):
  root = None
  canvas = None
  # dt=点滅間隔[msec]
  def __init__(self,id,dt):
    self.id= str(id)
    self.state = 'normal'
    self.dt = dt
    Photo.root.after(self.dt, self.blink)
  def blink(self):
    if self.state == 'normal':
      self.state = 'hidden'
    else:
      self.state = 'normal'
  self.canvas.itemconfigure(self.id, state=self.state)
  self.root.after(self.dt, self.blink)

class Photo2(object):
  root = None
  canvas = None
  # dt=点滅間隔[msec]
  def __init__(self,id,dt):
    self.id= str(id)
    self.state = 'normal'
    self.dt = dt
    Photo2.root.after(self.dt, self.blink)
  def blink(self):
    if self.state == 'normal':
      self.state = 'hidden'
    else:
      self.state = 'normal'
    self.canvas.itemconfigure(self.id, state=self.state)
    self.root.after(self.dt, self.blink)

rimg1 = Image.open('picture.png')
img1 = ImageTk.PhotoImage(rimg1) # 表示するイメージを用意

canvas1 = tk.Canvas(
  root, # 親要素をメインウィンドウに設定
  #scrollregion=tk.W,
  width=rimg1.width-20, # 幅を設定
  height=rimg1.height-20, # 高さを設定
  relief=tk.RIDGE, # 枠線を表示
  borderwidth=10# 枠線の幅を設定
)
canvas1.create_image( # キャンバス上にイメージを配置
  0, # x座標
  0, # y座標
  image=img1, # 配置するイメージオブジェクトを指定
  tag="illust", # タグで引数を追加する。
  anchor=tk.NW # 配置の起点となる位置を左上隅に指定
)
canvas1.pack(fill = 'none', side = 'left')
Photo.root = root
Photo.canvas = canvas1
root.a1 = Photo(1,500)

rimg2 = Image.open('picture2.png')
img2 = ImageTk.PhotoImage(rimg2) # 表示するイメージを用意

canvas2 = tk.Canvas(
  root, # 親要素をメインウィンドウに設定
  width=rimg2.width-20, # 幅を設定
  height=rimg2.height-20, # 高さを設定
  relief=tk.RIDGE, # 枠線を表示
  borderwidth=10# 枠線の幅を設定
)
canvas2.create_image( # キャンバス上にイメージを配置
  0, # x座標
  0, # y座標
  image=img2, # 配置するイメージオブジェクトを指定
  tag="illust2", # タグで引数を追加する。
  anchor=tk.NW # 配置の起点となる位置を左上隅に指定
)
canvas2.pack(fill = 'none', side = 'left')
Photo2.root = root
Photo2.canvas = canvas2
Photo2(1,250)

root.mainloop()

【VBS】ドラッグ&ドロップで結合ファイルを作成する

下のコードをテキストファイルにコピーして「MargeTextFile.vbs」とでも名前を付けて保存してください。

このvbsファイルに複数選択したテキストファイルをドラッグ&ドロップするとマージされたファイル「Marge.txt」ができます。

MargeTextFile.vbs

if WScript.Arguments.Count>1 Then
  Dim FSO
  Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
  Dim sMarge
  For i=0 To WScript.Arguments.Count-1
    Dim oArg
    oArg=WScript.Arguments.Item(i)
    If FSO.FileExists(oArg) Then
      Dim oFs
      Set oFs=FSO.GetFile(oArg).OpenAsTextStream
      sMarge=sMarge & oFs.ReadAll
    End If
  Next
  Dim oMrg
  Set oMrg=FSO.OpenTextFile(fso.getParentFolderName(WScript.ScriptFullName) & "\Marge.txt",2,True)
  oMrg.Write sMarge
  oMrg.Close
End If

UTF-8
MargeTextFileforUTF8.vbs

if WScript.Arguments.Count>1 Then
  Dim FSO
  Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
  Dim sMarge
  For i=0 To WScript.Arguments.Count-1
    Dim oArg
    oArg=WScript.Arguments.Item(i)
    If FSO.FileExists(oArg) Then
      Dim oFs
      Set oFs=CreateObject("ADODB.Stream")
      oFs.Type=2
      oFs.Charset="UTF-8"
      oFs.Open
      oFs.LoadFromFile oArg
      sMarge=sMarge & oFs.ReadText
      oFs.Close
    End If
  Next
  Dim oMrg
  Set oMrg=CreateObject("ADODB.Stream")
  oMrg.Type=2
  oMrg.Charset="UTF-8"
  oMrg.Open
  oMrg.WriteText sMarge
  oMrg.SaveToFile FSO.getParentFolderName(WScript.ScriptFullName) & "\Marge.txt", 2
  oMrg.Close
End If

【Java Swing】csvファイルをJTableに表示するプログラム

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
public class CsvView extends JFrame {
 private final static Charset SJIS = Charset.forName("sjis");
 private final JTable table = new JTable();
 private final JFileChooser filechooser = new JFileChooser();
 public CsvView(String title) {
  setTitle(title);
  setBounds(100, 100, 300, 250);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  filechooser.setDialogTitle("Csvファイルを開く");
  filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
  FileFilter filter = new FileNameExtensionFilter("CSVファイル", "csv");
  filechooser.addChoosableFileFilter(filter);
  JMenuItem menuitem1 = new JMenuItem("Csvファイルを開く");
  menuitem1.addActionListener(e -> loadCSV(true));
  JMenu menu1 = new JMenu("ファイル");
  menu1.add(menuitem1);
  JMenuBar menubar = new JMenuBar();
  menubar.add(menu1);
  setJMenuBar(menubar);
  table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  JScrollPane sp = new JScrollPane(table);
  add(sp);
 }

 private void loadCSV(boolean hasColHeader) {
  int selected = filechooser.showOpenDialog(this);
  if (selected != JFileChooser.APPROVE_OPTION) {
   return;
  }
  Path path = filechooser.getSelectedFile().toPath();
  int option = JOptionPane.showConfirmDialog(this, "ヘッダー(1行目)にタイトルを含みますか?",
    "ヘッダーの有無指定", JOptionPane.YES_NO_OPTION, 
    JOptionPane.WARNING_MESSAGE);
  if (option == JOptionPane.YES_OPTION){
   hasColHeader=true;
  }else if (option == JOptionPane.NO_OPTION){
   hasColHeader=false;
  }
  
  try (BufferedReader reader = Files.newBufferedReader(path, SJIS)) {
   String line = reader.readLine();
   if (line == null || line.isEmpty()) {
    table.setModel(new DefaultTableModel());
    return;
   }
   String[] lineData = line.split(",", -1);
   DefaultTableModel model;
   if (hasColHeader) {
    model = new DefaultTableModel(lineData, 0);
   } else {
    model = new DefaultTableModel(0, lineData.length);
    model.addRow(lineData);
   }
   while ((line = reader.readLine()) != null) {
    model.addRow(line.split(",", -1));
   }
   table.setModel(model);
  } catch (IOException e) {
   JOptionPane.showMessageDialog(this, e);
  }
 }

 public static void main(String args[]) {
  SwingUtilities.invokeLater(() -> {
   CsvView frame = new CsvView("Csvファイル表示");
   frame.setVisible(true);
  });
 }
}