OSDN Git Service

最小サイズ定義
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / ConfigDialog.java
index 191837d..583cfb8 100644 (file)
@@ -1,32 +1,47 @@
 /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-/*
  * Properties.java
  *
  * Created on 2011/08/20, 16:33:03
  */
 package yukihane.inqubus.gui;
 
-import java.util.Arrays;
+import static javax.swing.GroupLayout.DEFAULT_SIZE;
+import static javax.swing.GroupLayout.PREFERRED_SIZE;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
 import java.util.List;
-import javax.swing.DefaultListModel;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.BorderFactory;
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultComboBoxModel;
 import javax.swing.GroupLayout;
 import javax.swing.GroupLayout.Alignment;
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
 import javax.swing.JFrame;
+import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
 import javax.swing.LayoutStyle.ComponentPlacement;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+import javax.swing.WindowConstants;
+import org.apache.commons.configuration.ConfigurationException;
 import yukihane.inqubus.Config;
 
 /**
  *
  * @author yuki
  */
-public class ConfigDialog extends javax.swing.JDialog {
+public class ConfigDialog extends JDialog {
     private static final long serialVersionUID = 1L;
+    private static final Logger logger = Logger.getLogger(ConfigDialog.class.getName());
 
     /** Creates new form Properties */
     public ConfigDialog() {
@@ -35,149 +50,92 @@ public class ConfigDialog extends javax.swing.JDialog {
 
     public ConfigDialog(JFrame owner){
         super(owner);
-        initComponents();
-        loadConfig();
-    }
 
-    /** This method is called from within the constructor to
-     * initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is
-     * always regenerated by the Form Editor.
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        buttonGroup1 = new javax.swing.ButtonGroup();
-        jTabbedPane1 = new javax.swing.JTabbedPane();
-        pnlNetwork = new javax.swing.JPanel();
-        pnlAccount = new javax.swing.JPanel();
-        lblMail = new javax.swing.JLabel();
-        fldMail = new javax.swing.JTextField();
-        lblPassword = new javax.swing.JLabel();
-        fldPassword = new javax.swing.JTextField();
-        pnlProxy = new javax.swing.JPanel();
-        cbProxyUse = new javax.swing.JCheckBox();
-        lblProxyHost = new javax.swing.JLabel();
-        lblProxyPort = new javax.swing.JLabel();
-        fldProxyHost = new javax.swing.JTextField();
-        fldProxyPort = new javax.swing.JTextField();
-        pnlFile = new javax.swing.JPanel();
-        pnlFileVideo = new javax.swing.JPanel();
-        lblVideoDir = new javax.swing.JLabel();
-        lblVideoFileNamepattern = new javax.swing.JLabel();
-        fldVideoDir = new javax.swing.JTextField();
-        fldVideoFileNamePattern = new javax.swing.JTextField();
-        btnVideoDir = new javax.swing.JButton();
-        cbVideoLocal = new javax.swing.JCheckBox();
-        pnlFileComment = new javax.swing.JPanel();
-        lblCommentDir = new javax.swing.JLabel();
-        lblCommentFileNamePattern = new javax.swing.JLabel();
-        fldCommentDir = new javax.swing.JTextField();
-        fldCommentFileNamePattern = new javax.swing.JTextField();
-        btnCommentDir = new javax.swing.JButton();
-        cbCommentLocal = new javax.swing.JCheckBox();
-        pnlFileOutput = new javax.swing.JPanel();
-        lblOutputDir = new javax.swing.JLabel();
-        lblOutputFileNamePattern = new javax.swing.JLabel();
-        fldOutputDir = new javax.swing.JTextField();
-        fldOutputFileNamePattern = new javax.swing.JTextField();
-        btnOutputDir = new javax.swing.JButton();
-        cbOutputEnable = new javax.swing.JCheckBox();
-        cbOutputCommentOverlay = new javax.swing.JCheckBox();
-        cbOutputDisplayProgress = new javax.swing.JCheckBox();
-        pnlComment = new javax.swing.JPanel();
-        pnlCommentStandard = new javax.swing.JPanel();
-        lblCommentSize = new javax.swing.JLabel();
-        cbCommentSizeAuto = new javax.swing.JCheckBox();
-        lblCommentSizeManual = new javax.swing.JLabel();
-        fldCommentSizeManual = new javax.swing.JTextField();
-        lblCommentMinSize = new javax.swing.JLabel();
-        cbCommentMinSizeAuto = new javax.swing.JCheckBox();
-        fldCommentMinSizeManual = new javax.swing.JTextField();
-        lblCommentMinSizeManual = new javax.swing.JLabel();
-        lblCommentDisplayMax = new javax.swing.JLabel();
-        cbCommentDisplaySizeDefault = new javax.swing.JCheckBox();
-        lblCommentDisplayMaxManual = new javax.swing.JLabel();
-        fldCommentDisplaySizeManual = new javax.swing.JTextField();
-        pnlCommentAdvanced = new javax.swing.JPanel();
-        lblFontPath = new javax.swing.JLabel();
-        cbFontSizeArrangeDisable = new javax.swing.JCheckBox();
-        cbCommentOpaque = new javax.swing.JCheckBox();
-        fldFontPath = new javax.swing.JTextField();
-        btnFontPath = new javax.swing.JButton();
-        lblFontIndex = new javax.swing.JLabel();
-        lblFontShadow = new javax.swing.JLabel();
-        fldFontIndex = new javax.swing.JTextField();
-        fldFontShadow = new javax.swing.JTextField();
-        pnlFfmpeg = new javax.swing.JPanel();
-        jPanel10 = new javax.swing.JPanel();
-        lblFfmpegPath = new javax.swing.JLabel();
-        lblFfmpegDllPath = new javax.swing.JLabel();
-        fldFfmpegPath = new javax.swing.JTextField();
-        fldFfmpegDllPath = new javax.swing.JTextField();
-        btnFfmpegPath = new javax.swing.JButton();
-        btnFfmpegDllPath = new javax.swing.JButton();
-        pnlFfmpegParam = new javax.swing.JPanel();
-        rbFfmpegOptionFile = new javax.swing.JRadioButton();
-        rbFfmpegOptionDirectInput = new javax.swing.JRadioButton();
-        cmbFfmpegOptionFile = new javax.swing.JComboBox();
-        pnlFfmpegParamOption = new javax.swing.JPanel();
-        lblFfmpegOptionExtension = new javax.swing.JLabel();
-        lblFfmpegOptionMain = new javax.swing.JLabel();
-        lblFfmpegOptionIn = new javax.swing.JLabel();
-        lblFfmpegOptionOut = new javax.swing.JLabel();
-        lblFfmpegOptionAvfilter = new javax.swing.JLabel();
-        cbFfmpegOptionResize = new javax.swing.JCheckBox();
-        lblFfmpegOptionResizeWidth = new javax.swing.JLabel();
-        fldFfmpegOptionResizeWidth = new javax.swing.JTextField();
-        lblFfmpegOptionResizeHeight = new javax.swing.JLabel();
-        fldFfmpegOptionResizeHeight = new javax.swing.JTextField();
-        cbFfmpegOptionKeepAspect = new javax.swing.JCheckBox();
-        fldFfmpegOptionExtension = new javax.swing.JTextField();
-        fldFfmpegOptionMain = new javax.swing.JTextField();
-        fldFfmpegOptionIn = new javax.swing.JTextField();
-        fldFfmpegOptionOut = new javax.swing.JTextField();
-        fldFfmpegOptionAv = new javax.swing.JTextField();
-        pnlNgSetting = new javax.swing.JPanel();
-        pnlNgWord = new javax.swing.JPanel();
-        scrNgWord = new javax.swing.JScrollPane();
-        lstNgWord = new javax.swing.JList<>();
-        fldNgWord = new javax.swing.JTextField();
-        btnNgWordAdd = new javax.swing.JButton();
-        btnNgWordDel = new javax.swing.JButton();
-        pnlNgId = new javax.swing.JPanel();
-        scrNgId = new javax.swing.JScrollPane();
-        lstNgId = new javax.swing.JList<>();
-        fldNgId = new javax.swing.JTextField();
-        btnNgIdAdd = new javax.swing.JButton();
-        btnNgIdDel = new javax.swing.JButton();
-        pnlSearch = new javax.swing.JPanel();
-        pnlSearchVideo = new javax.swing.JPanel();
-        srcSearchVideo = new javax.swing.JScrollPane();
-        lstSearchVideo = new javax.swing.JList();
-        btnSearchVideoAdd = new javax.swing.JButton();
-        btnSearchVideoDel = new javax.swing.JButton();
-        pnlSearchComment = new javax.swing.JPanel();
-        srcSearchComment = new javax.swing.JScrollPane();
-        lstSearchComment = new javax.swing.JList();
-        btnSearchCommentAdd = new javax.swing.JButton();
-        btnSearchCommentDel = new javax.swing.JButton();
-        pnlSearchCache = new javax.swing.JPanel();
-        lblSearchCache = new javax.swing.JLabel();
-        fldSearchCache = new javax.swing.JTextField();
-
-        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
-
-        pnlNetwork.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
-
-        pnlAccount.setBorder(javax.swing.BorderFactory.createTitledBorder("アカウント"));
+        final JTabbedPane tabbedPane = new JTabbedPane();
+        final JPanel pnlNetwork = new JPanel();
+        final JPanel pnlAccount = new JPanel();
+        final JLabel lblMail = new JLabel();
+        fldMail = new JTextField();
+        final JLabel lblPassword = new JLabel();
+        fldPassword = new JTextField();
+        final JPanel pnlProxy = new JPanel();
+        cbProxyUse = new JCheckBox();
+        final JLabel lblProxyHost = new JLabel();
+        final JLabel lblProxyPort = new JLabel();
+        fldProxyHost = new JTextField();
+        fldProxyPort = new JTextField();
+        final JPanel pnlFile = new JPanel();
+        final JPanel pnlFileVideo = new JPanel();
+        final JLabel lblVideoDir = new JLabel();
+        final JLabel lblVideoFileNamepattern = new JLabel();
+        fldVideoDir = new JTextField();
+        fldVideoFileNamePattern = new JTextField();
+        btnVideoDir = new JButton();
+        cbVideoLocal = new JCheckBox();
+        final JPanel pnlFileComment = new JPanel();
+        final JLabel lblCommentDir = new JLabel();
+        final JLabel lblCommentFileNamePattern = new JLabel();
+        fldCommentDir = new JTextField();
+        fldCommentFileNamePattern = new JTextField();
+        btnCommentDir = new JButton();
+        cbCommentLocal = new JCheckBox();
+        final JPanel pnlFileOutput = new JPanel();
+        final JLabel lblOutputDir = new JLabel();
+        final JLabel lblOutputFileNamePattern = new JLabel();
+        fldOutputDir = new JTextField();
+        fldOutputFileNamePattern = new JTextField();
+        btnOutputDir = new JButton();
+        cbOutputEnable = new JCheckBox();
+        cbOutputCommentOverlay = new JCheckBox();
+        cbOutputDisplayProgress = new JCheckBox();
+        final JPanel pnlComment = new JPanel();
+        final JPanel pnlCommentStandard = new JPanel();
+        final JLabel lblCommentSize = new JLabel();
+        cbCommentSizeAuto = new JCheckBox();
+        final JLabel lblCommentSizeManual = new JLabel();
+        fldCommentSizeManual = new JTextField();
+        final JLabel lblCommentMinSize = new JLabel();
+        cbCommentMinSizeAuto = new JCheckBox();
+        fldCommentMinSizeManual = new JTextField();
+        final JLabel lblCommentMinSizeManual = new JLabel();
+        final JLabel lblCommentDisplayMax = new JLabel();
+        cbCommentDisplaySizeDefault = new JCheckBox();
+        final JLabel lblCommentDisplayMaxManual = new JLabel();
+        fldCommentDisplaySizeManual = new JTextField();
+        final JPanel pnlCommentAdvanced = new JPanel();
+        final JLabel lblFontPath = new JLabel();
+        cbFontSizeArrangeDisable = new JCheckBox();
+        cbCommentOpaque = new JCheckBox();
+        fldFontPath = new JTextField();
+        btnFontPath = new JButton();
+        final JLabel lblFontIndex = new JLabel();
+        final JLabel lblFontShadow = new JLabel();
+        fldFontIndex = new JTextField();
+        final JPanel pnlFfmpeg = new JPanel();
+        final JPanel jPanel10 = new JPanel();
+        final JLabel lblFfmpegPath = new JLabel();
+        final JLabel lblFfmpegDllPath = new JLabel();
+        fldFfmpegPath = new JTextField();
+        fldFfmpegDllPath = new JTextField();
+        btnFfmpegPath = new JButton();
+        btnFfmpegDllPath = new JButton();
+        final JPanel pnlNgSetting = new JPanel();
+        final JPanel pnlSearch = new JPanel();
+        final JPanel pnlSearchCache = new JPanel();
+        final JLabel lblSearchCache = new JLabel();
+        fldSearchCache = new JTextField();
+
+        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+
+        pnlNetwork.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
+        pnlAccount.setBorder(BorderFactory.createTitledBorder("アカウント"));
 
         lblMail.setText("ID(メールアドレス)");
 
         lblPassword.setText("パスワード");
 
-        javax.swing.GroupLayout gl_pnlAccount = new javax.swing.GroupLayout(pnlAccount);
+        GroupLayout gl_pnlAccount = new GroupLayout(pnlAccount);
         pnlAccount.setLayout(gl_pnlAccount);
         gl_pnlAccount.setHorizontalGroup(
             gl_pnlAccount.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -206,7 +164,7 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        pnlProxy.setBorder(javax.swing.BorderFactory.createTitledBorder("プロキシ"));
+        pnlProxy.setBorder(BorderFactory.createTitledBorder("プロキシ"));
 
         cbProxyUse.setText("プロキシを使用する");
 
@@ -214,7 +172,7 @@ public class ConfigDialog extends javax.swing.JDialog {
 
         lblProxyPort.setText("ポート番号");
 
-        javax.swing.GroupLayout gl_pnlProxy = new javax.swing.GroupLayout(pnlProxy);
+        GroupLayout gl_pnlProxy = new GroupLayout(pnlProxy);
         pnlProxy.setLayout(gl_pnlProxy);
         gl_pnlProxy.setHorizontalGroup(
             gl_pnlProxy.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -248,7 +206,7 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(39, Short.MAX_VALUE))
         );
 
-        javax.swing.GroupLayout gl_pnlNetwork = new javax.swing.GroupLayout(pnlNetwork);
+        GroupLayout gl_pnlNetwork = new GroupLayout(pnlNetwork);
         pnlNetwork.setLayout(gl_pnlNetwork);
         gl_pnlNetwork.setHorizontalGroup(
             gl_pnlNetwork.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -269,19 +227,19 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(178, Short.MAX_VALUE))
         );
 
-        jTabbedPane1.addTab("ネットワーク", pnlNetwork);
+        tabbedPane.addTab("ネットワーク", pnlNetwork);
 
-        pnlFileVideo.setBorder(javax.swing.BorderFactory.createTitledBorder("動画"));
+        pnlFileVideo.setBorder(BorderFactory.createTitledBorder("動画"));
 
         lblVideoDir.setText("保存フォルダ");
 
-        lblVideoFileNamepattern.setText("ファイル名パターン");
+        lblVideoFileNamepattern.setText("ファイル名規則");
 
         btnVideoDir.setText("...");
 
         cbVideoLocal.setText("local");
 
-        javax.swing.GroupLayout gl_pnlFileVideo = new javax.swing.GroupLayout(pnlFileVideo);
+        GroupLayout gl_pnlFileVideo = new GroupLayout(pnlFileVideo);
         pnlFileVideo.setLayout(gl_pnlFileVideo);
         gl_pnlFileVideo.setHorizontalGroup(
             gl_pnlFileVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -317,17 +275,17 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        pnlFileComment.setBorder(javax.swing.BorderFactory.createTitledBorder("コメント"));
+        pnlFileComment.setBorder(BorderFactory.createTitledBorder("コメント"));
 
         lblCommentDir.setText("保存フォルダ");
 
-        lblCommentFileNamePattern.setText("ファイル名パターン");
+        lblCommentFileNamePattern.setText("ファイル名規則");
 
         btnCommentDir.setText("...");
 
         cbCommentLocal.setText("local");
 
-        javax.swing.GroupLayout gl_pnlFileComment = new javax.swing.GroupLayout(pnlFileComment);
+        GroupLayout gl_pnlFileComment = new GroupLayout(pnlFileComment);
         pnlFileComment.setLayout(gl_pnlFileComment);
         gl_pnlFileComment.setHorizontalGroup(
             gl_pnlFileComment.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -363,11 +321,11 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        pnlFileOutput.setBorder(javax.swing.BorderFactory.createTitledBorder("変換動画"));
+        pnlFileOutput.setBorder(BorderFactory.createTitledBorder("変換動画"));
 
         lblOutputDir.setText("保存フォルダ");
 
-        lblOutputFileNamePattern.setText("ファイル名パターン");
+        lblOutputFileNamePattern.setText("ファイル名規則");
 
         btnOutputDir.setText("...");
 
@@ -377,7 +335,7 @@ public class ConfigDialog extends javax.swing.JDialog {
 
         cbOutputDisplayProgress.setText("変換中動画表示");
 
-        javax.swing.GroupLayout gl_pnlFileOutput = new javax.swing.GroupLayout(pnlFileOutput);
+        GroupLayout gl_pnlFileOutput = new GroupLayout(pnlFileOutput);
         pnlFileOutput.setLayout(gl_pnlFileOutput);
         gl_pnlFileOutput.setHorizontalGroup(
             gl_pnlFileOutput.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -421,7 +379,39 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        javax.swing.GroupLayout gl_pnlFile = new javax.swing.GroupLayout(pnlFile);
+        final JPanel pnlFileProhibit = new JPanel();
+        pnlFileProhibit.setBorder(BorderFactory.createTitledBorder("禁則文字"));
+        final JLabel lblReplaceFrom = new JLabel("置換対象文字");
+        final JLabel lblReplaceTo = new JLabel("置換後文字");
+
+        final GroupLayout glProhibit = new GroupLayout(pnlFileProhibit);
+        glProhibit.setAutoCreateContainerGaps(true);
+        glProhibit.setAutoCreateGaps(true);
+        pnlFileProhibit.setLayout(glProhibit);
+
+        glProhibit.setHorizontalGroup(glProhibit.createSequentialGroup()
+            .addGroup(glProhibit.createParallelGroup()
+                .addComponent(lblReplaceFrom)
+                .addComponent(lblReplaceTo)
+            )
+            .addGroup(glProhibit.createParallelGroup()
+                .addComponent(fldReplaceFrom)
+                .addComponent(fldReplaceTo)
+            )
+        );
+
+        glProhibit.setVerticalGroup(glProhibit.createSequentialGroup()
+            .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
+                .addComponent(lblReplaceFrom)
+                .addComponent(fldReplaceFrom)
+            )
+            .addGroup(glProhibit.createParallelGroup(Alignment.BASELINE)
+                .addComponent(lblReplaceTo)
+                .addComponent(fldReplaceTo)
+            )
+        );
+
+        GroupLayout gl_pnlFile = new GroupLayout(pnlFile);
         pnlFile.setLayout(gl_pnlFile);
         gl_pnlFile.setHorizontalGroup(
             gl_pnlFile.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -430,7 +420,9 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addGroup(gl_pnlFile.createParallelGroup(GroupLayout.Alignment.TRAILING)
                     .addComponent(pnlFileOutput, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                     .addComponent(pnlFileVideo, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(pnlFileComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addComponent(pnlFileComment, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(pnlFileProhibit, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                )
                 .addContainerGap())
         );
         gl_pnlFile.setVerticalGroup(
@@ -442,12 +434,14 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addComponent(pnlFileComment, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(ComponentPlacement.RELATED)
                 .addComponent(pnlFileOutput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(137, Short.MAX_VALUE))
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addComponent(pnlFileProhibit, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
         );
 
-        jTabbedPane1.addTab("ファイル", pnlFile);
+        tabbedPane.addTab("ファイル", pnlFile);
 
-        pnlCommentStandard.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        pnlCommentStandard.setBorder(BorderFactory.createTitledBorder(""));
 
         lblCommentSize.setText("再生時間に応じたコメントの取得数");
 
@@ -467,60 +461,49 @@ public class ConfigDialog extends javax.swing.JDialog {
 
         lblCommentDisplayMaxManual.setText("手動設定");
 
-        javax.swing.GroupLayout gl_pnlCommentStandard = new javax.swing.GroupLayout(pnlCommentStandard);
+        GroupLayout gl_pnlCommentStandard = new GroupLayout(pnlCommentStandard);
         pnlCommentStandard.setLayout(gl_pnlCommentStandard);
+        gl_pnlCommentStandard.setAutoCreateContainerGaps(true);
+        gl_pnlCommentStandard.setAutoCreateGaps(true);
         gl_pnlCommentStandard.setHorizontalGroup(
-            gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlCommentStandard.createSequentialGroup()
-                .addContainerGap()
+            gl_pnlCommentStandard.createSequentialGroup()
                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
-                    .addGroup(gl_pnlCommentStandard.createSequentialGroup()
-                        .addComponent(lblCommentSize)
-                        .addGap(18, 18, 18)
-                        .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
-                            .addComponent(cbCommentSizeAuto)
-                            .addComponent(cbCommentMinSizeAuto)
-                            .addComponent(cbCommentDisplaySizeDefault))
-                        .addGap(18, 18, 18)
-                        .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
-                            .addComponent(lblCommentDisplayMaxManual)
-                            .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING, false)
-                                .addComponent(lblCommentMinSizeManual, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                .addComponent(lblCommentSizeManual, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+                    .addComponent(lblCommentSize)
                     .addComponent(lblCommentMinSize)
                     .addComponent(lblCommentDisplayMax))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING, false)
-                    .addComponent(fldCommentDisplaySizeManual, 0, 0, Short.MAX_VALUE)
-                    .addComponent(fldCommentMinSizeManual)
-                    .addComponent(fldCommentSizeManual, GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE))
-                .addContainerGap(25, Short.MAX_VALUE))
+                .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
+                    .addComponent(cbCommentSizeAuto)
+                    .addComponent(cbCommentMinSizeAuto)
+                    .addComponent(cbCommentDisplaySizeDefault))
+                .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
+                    .addComponent(lblCommentSizeManual)
+                    .addComponent(lblCommentMinSizeManual)
+                    .addComponent(lblCommentDisplayMaxManual))
+                .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
+                    .addComponent(fldCommentSizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                    .addComponent(fldCommentMinSizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                    .addComponent(fldCommentDisplaySizeManual, 48, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
         );
         gl_pnlCommentStandard.setVerticalGroup(
-            gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlCommentStandard.createSequentialGroup()
-                .addContainerGap()
+            gl_pnlCommentStandard.createSequentialGroup()
                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(lblCommentSizeManual)
-                    .addComponent(fldCommentSizeManual, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                     .addComponent(lblCommentSize)
-                    .addComponent(cbCommentSizeAuto))
-                .addPreferredGap(ComponentPlacement.RELATED)
+                    .addComponent(cbCommentSizeAuto)
+                    .addComponent(lblCommentSizeManual)
+                    .addComponent(fldCommentSizeManual))
                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
                     .addComponent(lblCommentMinSize)
                     .addComponent(cbCommentMinSizeAuto)
                     .addComponent(lblCommentMinSizeManual)
-                    .addComponent(fldCommentMinSizeManual, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
+                    .addComponent(fldCommentMinSizeManual))
                 .addGroup(gl_pnlCommentStandard.createParallelGroup(GroupLayout.Alignment.BASELINE)
                     .addComponent(lblCommentDisplayMax)
                     .addComponent(cbCommentDisplaySizeDefault)
                     .addComponent(lblCommentDisplayMaxManual)
-                    .addComponent(fldCommentDisplaySizeManual, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addComponent(fldCommentDisplaySizeManual))
         );
 
-        pnlCommentAdvanced.setBorder(javax.swing.BorderFactory.createTitledBorder("高度な設定"));
+        pnlCommentAdvanced.setBorder(BorderFactory.createTitledBorder("高度な設定"));
 
         lblFontPath.setText("フォントパス");
 
@@ -533,8 +516,11 @@ public class ConfigDialog extends javax.swing.JDialog {
         lblFontIndex.setText("フォント番号");
 
         lblFontShadow.setText("影の種類");
+        final ComboBoxModel<String> cbmFontShadow
+                = new DefaultComboBoxModel<>(new String[]{"0:なし", "1:ニコニコ動画風", "2:右下", "3:囲い込み"});
+        cmbFontShadow.setModel(cbmFontShadow);
 
-        javax.swing.GroupLayout gl_pnlCommentAdvanced = new javax.swing.GroupLayout(pnlCommentAdvanced);
+        GroupLayout gl_pnlCommentAdvanced = new GroupLayout(pnlCommentAdvanced);
         pnlCommentAdvanced.setLayout(gl_pnlCommentAdvanced);
         gl_pnlCommentAdvanced.setHorizontalGroup(
             gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -551,7 +537,7 @@ public class ConfigDialog extends javax.swing.JDialog {
                         .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.LEADING)
                             .addComponent(fldFontPath, GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)
                             .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
-                                .addComponent(fldFontShadow, GroupLayout.Alignment.LEADING)
+                                .addComponent(cmbFontShadow, GroupLayout.Alignment.LEADING)
                                 .addComponent(fldFontIndex, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)))
                         .addPreferredGap(ComponentPlacement.RELATED)
                         .addComponent(btnFontPath))
@@ -572,7 +558,7 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addPreferredGap(ComponentPlacement.RELATED)
                 .addGroup(gl_pnlCommentAdvanced.createParallelGroup(GroupLayout.Alignment.BASELINE)
                     .addComponent(lblFontShadow)
-                    .addComponent(fldFontShadow, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
+                    .addComponent(cmbFontShadow, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                 .addPreferredGap(ComponentPlacement.RELATED)
                 .addComponent(cbFontSizeArrangeDisable)
                 .addPreferredGap(ComponentPlacement.RELATED)
@@ -580,7 +566,7 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        javax.swing.GroupLayout gl_pnlComment = new javax.swing.GroupLayout(pnlComment);
+        GroupLayout gl_pnlComment = new GroupLayout(pnlComment);
         pnlComment.setLayout(gl_pnlComment);
         gl_pnlComment.setHorizontalGroup(
             gl_pnlComment.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -601,9 +587,9 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(168, Short.MAX_VALUE))
         );
 
-        jTabbedPane1.addTab("コメント", pnlComment);
+        tabbedPane.addTab("コメント", pnlComment);
 
-        jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("ファイルパス"));
+        jPanel10.setBorder(BorderFactory.createTitledBorder("ファイルパス"));
 
         lblFfmpegPath.setText("ffmpeg");
 
@@ -613,7 +599,7 @@ public class ConfigDialog extends javax.swing.JDialog {
 
         btnFfmpegDllPath.setText("...");
 
-        javax.swing.GroupLayout gl_jPanel10 = new javax.swing.GroupLayout(jPanel10);
+        GroupLayout gl_jPanel10 = new GroupLayout(jPanel10);
         jPanel10.setLayout(gl_jPanel10);
         gl_jPanel10.setHorizontalGroup(
             gl_jPanel10.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -647,138 +633,11 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        pnlFfmpegParam.setBorder(javax.swing.BorderFactory.createTitledBorder("ffmpegパラメータ"));
-
-        buttonGroup1.add(rbFfmpegOptionFile);
-        rbFfmpegOptionFile.setText("オプションファイル");
-
-        buttonGroup1.add(rbFfmpegOptionDirectInput);
-        rbFfmpegOptionDirectInput.setText("直接入力");
-
-        cmbFfmpegOptionFile.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
-
-        pnlFfmpegParamOption.setBorder(javax.swing.BorderFactory.createEtchedBorder());
-
-        lblFfmpegOptionExtension.setText("出力動画の拡張子");
+        pnlFfmpegParam.setBorder(BorderFactory.createTitledBorder("ffmpegパラメータ"));
 
-        lblFfmpegOptionMain.setText("メインオプション");
 
-        lblFfmpegOptionIn.setText("入力オプション");
 
-        lblFfmpegOptionOut.setText("出力オプション");
-
-        lblFfmpegOptionAvfilter.setText("avfilterオプション");
-
-        cbFfmpegOptionResize.setText("次のサイズに収まるよう縮小(-s)");
-
-        lblFfmpegOptionResizeWidth.setText("横");
-
-        lblFfmpegOptionResizeHeight.setText("縦");
-
-        cbFfmpegOptionKeepAspect.setText("アスペクト比を維持");
-
-        javax.swing.GroupLayout gl_pnlFfmpegParamOption = new javax.swing.GroupLayout(pnlFfmpegParamOption);
-        pnlFfmpegParamOption.setLayout(gl_pnlFfmpegParamOption);
-        gl_pnlFfmpegParamOption.setHorizontalGroup(
-            gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
-                    .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
-                        .addContainerGap()
-                        .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
-                            .addComponent(lblFfmpegOptionAvfilter)
-                            .addComponent(lblFfmpegOptionExtension)
-                            .addComponent(lblFfmpegOptionMain)
-                            .addComponent(lblFfmpegOptionIn)
-                            .addComponent(lblFfmpegOptionOut))
-                        .addPreferredGap(ComponentPlacement.RELATED)
-                        .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
-                            .addComponent(fldFfmpegOptionExtension, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE)
-                            .addComponent(fldFfmpegOptionMain, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
-                            .addComponent(fldFfmpegOptionIn, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
-                            .addComponent(fldFfmpegOptionOut, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
-                            .addComponent(fldFfmpegOptionAv, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)))
-                    .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
-                        .addGap(12, 12, 12)
-                        .addComponent(cbFfmpegOptionResize)
-                        .addPreferredGap(ComponentPlacement.UNRELATED)
-                        .addComponent(lblFfmpegOptionResizeWidth)
-                        .addPreferredGap(ComponentPlacement.RELATED)
-                        .addComponent(fldFfmpegOptionResizeWidth, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE)
-                        .addGap(12, 12, 12)
-                        .addComponent(lblFfmpegOptionResizeHeight)
-                        .addPreferredGap(ComponentPlacement.RELATED)
-                        .addComponent(fldFfmpegOptionResizeHeight, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE))
-                    .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
-                        .addGap(33, 33, 33)
-                        .addComponent(cbFfmpegOptionKeepAspect)))
-                .addContainerGap())
-        );
-        gl_pnlFfmpegParamOption.setVerticalGroup(
-            gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlFfmpegParamOption.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(lblFfmpegOptionExtension)
-                    .addComponent(fldFfmpegOptionExtension, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(lblFfmpegOptionMain)
-                    .addComponent(fldFfmpegOptionMain, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(lblFfmpegOptionIn)
-                    .addComponent(fldFfmpegOptionIn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(lblFfmpegOptionOut)
-                    .addComponent(fldFfmpegOptionOut, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(lblFfmpegOptionAvfilter)
-                    .addComponent(fldFfmpegOptionAv, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlFfmpegParamOption.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(cbFfmpegOptionResize)
-                    .addComponent(lblFfmpegOptionResizeWidth)
-                    .addComponent(fldFfmpegOptionResizeWidth, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-                    .addComponent(lblFfmpegOptionResizeHeight)
-                    .addComponent(fldFfmpegOptionResizeHeight, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addComponent(cbFfmpegOptionKeepAspect)
-//                .addContainerGap(43, Short.MAX_VALUE))
-        ));
-
-        GroupLayout gl_pnlFfmpegParam = new GroupLayout(pnlFfmpegParam);
-        pnlFfmpegParam.setLayout(gl_pnlFfmpegParam);
-        gl_pnlFfmpegParam.setHorizontalGroup(
-            gl_pnlFfmpegParam.createParallelGroup(Alignment.LEADING)
-            .addGroup(gl_pnlFfmpegParam.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(gl_pnlFfmpegParam.createParallelGroup(Alignment.LEADING)
-                    .addComponent(pnlFfmpegParamOption, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addGroup(gl_pnlFfmpegParam.createSequentialGroup()
-                        .addComponent(rbFfmpegOptionFile)
-                        .addPreferredGap(ComponentPlacement.RELATED)
-                        .addComponent(cmbFfmpegOptionFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                    .addComponent(rbFfmpegOptionDirectInput))
-                .addContainerGap())
-        );
-        gl_pnlFfmpegParam.setVerticalGroup(
-            gl_pnlFfmpegParam.createParallelGroup(Alignment.LEADING)
-            .addGroup(gl_pnlFfmpegParam.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(gl_pnlFfmpegParam.createParallelGroup(Alignment.BASELINE)
-                    .addComponent(rbFfmpegOptionFile)
-                    .addComponent(cmbFfmpegOptionFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addComponent(rbFfmpegOptionDirectInput)
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addComponent(pnlFfmpegParamOption, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addContainerGap())
-        );
-
-        javax.swing.GroupLayout gl_pnlFfmpeg = new javax.swing.GroupLayout(pnlFfmpeg);
+        GroupLayout gl_pnlFfmpeg = new GroupLayout(pnlFfmpeg);
         pnlFfmpeg.setLayout(gl_pnlFfmpeg);
         gl_pnlFfmpeg.setHorizontalGroup(
             gl_pnlFfmpeg.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -799,83 +658,12 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap())
         );
 
-        jTabbedPane1.addTab("ffmpeg", pnlFfmpeg);
-
-        pnlNgWord.setBorder(javax.swing.BorderFactory.createTitledBorder("NGワード"));
-
-        lstNgWord.setModel(mdlNgWord);
-        scrNgWord.setViewportView(lstNgWord);
-
-        btnNgWordAdd.setText("追加");
+        tabbedPane.addTab("ffmpeg", pnlFfmpeg);
 
-        btnNgWordDel.setText("削除");
+        pnlNgWord.setBorder(BorderFactory.createTitledBorder("NGワード"));
+        pnlNgId.setBorder(BorderFactory.createTitledBorder("NGID"));
 
-        javax.swing.GroupLayout gl_pnlNgWord = new javax.swing.GroupLayout(pnlNgWord);
-        pnlNgWord.setLayout(gl_pnlNgWord);
-        gl_pnlNgWord.setHorizontalGroup(
-            gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlNgWord.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.LEADING)
-                    .addComponent(scrNgWord, GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
-                    .addGroup(gl_pnlNgWord.createSequentialGroup()
-                        .addComponent(fldNgWord, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
-                        .addPreferredGap(ComponentPlacement.RELATED)
-                        .addComponent(btnNgWordAdd)
-                        .addGap(18, 18, 18)
-                        .addComponent(btnNgWordDel)))
-                .addContainerGap())
-        );
-        gl_pnlNgWord.setVerticalGroup(
-            gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlNgWord.createSequentialGroup()
-                .addComponent(scrNgWord, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlNgWord.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(fldNgWord, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-                    .addComponent(btnNgWordDel)
-                    .addComponent(btnNgWordAdd))
-                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        pnlNgId.setBorder(javax.swing.BorderFactory.createTitledBorder("NGID"));
-
-        lstNgId.setModel(mdlNgId);
-        scrNgId.setViewportView(lstNgId);
-
-        btnNgIdAdd.setText("追加");
-
-        btnNgIdDel.setText("削除");
-
-        javax.swing.GroupLayout gl_pnlNgId = new javax.swing.GroupLayout(pnlNgId);
-        pnlNgId.setLayout(gl_pnlNgId);
-        gl_pnlNgId.setHorizontalGroup(
-            gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlNgId.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.LEADING)
-                    .addComponent(scrNgId, GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
-                    .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlNgId.createSequentialGroup()
-                        .addComponent(fldNgId, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
-                        .addPreferredGap(ComponentPlacement.RELATED)
-                        .addComponent(btnNgIdAdd)
-                        .addGap(18, 18, 18)
-                        .addComponent(btnNgIdDel)))
-                .addContainerGap())
-        );
-        gl_pnlNgId.setVerticalGroup(
-            gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlNgId.createSequentialGroup()
-                .addComponent(scrNgId, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlNgId.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(fldNgId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-                    .addComponent(btnNgIdDel)
-                    .addComponent(btnNgIdAdd))
-                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        javax.swing.GroupLayout gl_pnlNgSetting = new javax.swing.GroupLayout(pnlNgSetting);
+        GroupLayout gl_pnlNgSetting = new GroupLayout(pnlNgSetting);
         pnlNgSetting.setLayout(gl_pnlNgSetting);
         gl_pnlNgSetting.setHorizontalGroup(
             gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -890,91 +678,22 @@ public class ConfigDialog extends javax.swing.JDialog {
             gl_pnlNgSetting.createParallelGroup(GroupLayout.Alignment.LEADING)
             .addGroup(gl_pnlNgSetting.createSequentialGroup()
                 .addContainerGap()
-                .addComponent(pnlNgWord, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+                .addComponent(pnlNgWord, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addPreferredGap(ComponentPlacement.RELATED)
-                .addComponent(pnlNgId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(82, Short.MAX_VALUE))
-        );
-
-        jTabbedPane1.addTab("NG設定", pnlNgSetting);
-
-        pnlSearchVideo.setBorder(javax.swing.BorderFactory.createTitledBorder("動画検索対象フォルダ"));
-
-        lstSearchVideo.setModel(new javax.swing.AbstractListModel() {
-            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
-            public int getSize() { return strings.length; }
-            public Object getElementAt(int i) { return strings[i]; }
-        });
-        srcSearchVideo.setViewportView(lstSearchVideo);
-
-        btnSearchVideoAdd.setText("追加...");
-
-        btnSearchVideoDel.setText("削除");
-
-        javax.swing.GroupLayout gl_pnlSearchVideo = new javax.swing.GroupLayout(pnlSearchVideo);
-        pnlSearchVideo.setLayout(gl_pnlSearchVideo);
-        gl_pnlSearchVideo.setHorizontalGroup(
-            gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addComponent(srcSearchVideo, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
-            .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchVideo.createSequentialGroup()
-                .addContainerGap(269, Short.MAX_VALUE)
-                .addComponent(btnSearchVideoAdd)
-                .addGap(18, 18, 18)
-                .addComponent(btnSearchVideoDel)
+                .addComponent(pnlNgId, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addContainerGap())
         );
-        gl_pnlSearchVideo.setVerticalGroup(
-            gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlSearchVideo.createSequentialGroup()
-                .addComponent(srcSearchVideo, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlSearchVideo.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(btnSearchVideoDel)
-                    .addComponent(btnSearchVideoAdd))
-                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
 
-        pnlSearchComment.setBorder(javax.swing.BorderFactory.createTitledBorder("コメント検索対象フォルダ"));
+        tabbedPane.addTab("NG設定", pnlNgSetting);
 
-        lstSearchComment.setModel(new javax.swing.AbstractListModel() {
-            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
-            public int getSize() { return strings.length; }
-            public Object getElementAt(int i) { return strings[i]; }
-        });
-        srcSearchComment.setViewportView(lstSearchComment);
-
-        btnSearchCommentAdd.setText("追加...");
-
-        btnSearchCommentDel.setText("削除");
-
-        javax.swing.GroupLayout gl_pnlSearchComment = new javax.swing.GroupLayout(pnlSearchComment);
-        pnlSearchComment.setLayout(gl_pnlSearchComment);
-        gl_pnlSearchComment.setHorizontalGroup(
-            gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addComponent(srcSearchComment, GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
-            .addGroup(GroupLayout.Alignment.TRAILING, gl_pnlSearchComment.createSequentialGroup()
-                .addContainerGap(269, Short.MAX_VALUE)
-                .addComponent(btnSearchCommentAdd)
-                .addGap(18, 18, 18)
-                .addComponent(btnSearchCommentDel)
-                .addContainerGap())
-        );
-        gl_pnlSearchComment.setVerticalGroup(
-            gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addGroup(gl_pnlSearchComment.createSequentialGroup()
-                .addComponent(srcSearchComment, GroupLayout.PREFERRED_SIZE, 100, GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(ComponentPlacement.RELATED)
-                .addGroup(gl_pnlSearchComment.createParallelGroup(GroupLayout.Alignment.BASELINE)
-                    .addComponent(btnSearchCommentDel)
-                    .addComponent(btnSearchCommentAdd))
-                .addContainerGap(16, Short.MAX_VALUE))
-        );
+        pnlSearchVideo.setBorder(BorderFactory.createTitledBorder("動画検索対象フォルダ"));
+        pnlSearchComment.setBorder(BorderFactory.createTitledBorder("コメント検索対象フォルダ"));
 
-        pnlSearchCache.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+        pnlSearchCache.setBorder(BorderFactory.createEtchedBorder());
 
         lblSearchCache.setText("キャッシュ更新(秒)");
 
-        javax.swing.GroupLayout gl_pnlSearchCache = new javax.swing.GroupLayout(pnlSearchCache);
+        GroupLayout gl_pnlSearchCache = new GroupLayout(pnlSearchCache);
         pnlSearchCache.setLayout(gl_pnlSearchCache);
         gl_pnlSearchCache.setHorizontalGroup(
             gl_pnlSearchCache.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -995,7 +714,7 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        javax.swing.GroupLayout gl_pnlSearch = new javax.swing.GroupLayout(pnlSearch);
+        GroupLayout gl_pnlSearch = new GroupLayout(pnlSearch);
         pnlSearch.setLayout(gl_pnlSearch);
         gl_pnlSearch.setHorizontalGroup(
             gl_pnlSearch.createParallelGroup(GroupLayout.Alignment.LEADING)
@@ -1019,60 +738,117 @@ public class ConfigDialog extends javax.swing.JDialog {
                 .addContainerGap(27, Short.MAX_VALUE))
         );
 
-        jTabbedPane1.addTab("検索", pnlSearch);
+        tabbedPane.addTab("検索", pnlSearch);
 
         final JPanel pnlButton = new JPanel();
         final JButton btnOk = new JButton("OK");
+        btnOk.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                saveConfig();
+                dispose();
+            }
+        });
         final JButton btnCancel = new JButton("Cancel");
         pnlButton.add(btnOk);
         pnlButton.add(btnCancel);
 
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+        GroupLayout layout = new GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
             layout.createParallelGroup(GroupLayout.Alignment.LEADING)
-            .addComponent(jTabbedPane1, GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE)
+            .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE)
             .addComponent(pnlButton)
         );
         layout.setVerticalGroup(
-//            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
-//            .addGroup(layout.createSequentialGroup()
-//                .addComponent(jTabbedPane1, GroupLayout.DEFAULT_SIZE, 451, GroupLayout.PREFERRED_SIZE)
-//                .addContainerGap(23, Short.MAX_VALUE))
             layout.createSequentialGroup()
-                .addComponent(jTabbedPane1,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
+                .addComponent(tabbedPane,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
                 .addComponent(pnlButton)
         );
 
+        final JLabel lblSystemThreadDownload = new JLabel("ダウンロードスレッド数");
+        final JLabel lblSystemWaitDownload = new JLabel("ダウンロード開始最小間隔(秒)");
+        final JLabel lblSystemThreadConvert = new JLabel("変換スレッド数");
+        final JLabel lblSystemTempDir = new JLabel("作業フォルダ");
+
+        final JPanel pnlSystemGeneral = new JPanel();
+        pnlSystemGeneral.setBorder(BorderFactory.createTitledBorder("システム"));
+        final GroupLayout glSystemGenegal = new GroupLayout(pnlSystemGeneral);
+        glSystemGenegal.setAutoCreateGaps(true);
+        glSystemGenegal.setAutoCreateContainerGaps(true);
+        pnlSystemGeneral.setLayout(glSystemGenegal);
+
+        glSystemGenegal.setHorizontalGroup(glSystemGenegal.createParallelGroup()
+            .addGroup(glSystemGenegal.createSequentialGroup()
+                .addGroup(glSystemGenegal.createParallelGroup()
+                    .addComponent(lblSystemThreadDownload)
+                    .addComponent(lblSystemWaitDownload)
+                    .addComponent(lblSystemThreadConvert))
+                .addGroup(glSystemGenegal.createParallelGroup()
+                    .addComponent(fldSystemThreadDownload, PREFERRED_SIZE, 40, PREFERRED_SIZE)
+                    .addComponent(fldSystemWaitDownload, PREFERRED_SIZE, 40, PREFERRED_SIZE)
+                    .addComponent(fldSystemThreadConvert, PREFERRED_SIZE, 40, PREFERRED_SIZE)
+                )
+            )
+            .addGroup(glSystemGenegal.createSequentialGroup()
+                .addComponent(lblSystemTempDir)
+                .addComponent(fldSystemTempDir, DEFAULT_SIZE, 400, Short.MAX_VALUE)
+                )
+            );
+
+        glSystemGenegal.setVerticalGroup(glSystemGenegal.createSequentialGroup()
+            .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+                .addComponent(lblSystemThreadDownload)
+                .addComponent(fldSystemThreadDownload, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
+            .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+                .addComponent(lblSystemWaitDownload)
+                .addComponent(fldSystemWaitDownload, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
+            .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+                .addComponent(lblSystemThreadConvert)
+                .addComponent(fldSystemThreadConvert, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE))
+            .addGroup(glSystemGenegal.createParallelGroup(Alignment.BASELINE)
+                .addComponent(lblSystemTempDir)
+                .addComponent(fldSystemTempDir, DEFAULT_SIZE, PREFERRED_SIZE, PREFERRED_SIZE)));
+
+        final JPanel pnlSystem = new JPanel();
+        pnlSystem.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        final GroupLayout glSystem = new GroupLayout(pnlSystem);
+        glSystem.setAutoCreateGaps(true);
+        glSystem.setAutoCreateContainerGaps(true);
+        pnlSystem.setLayout(glSystem);
+
+        glSystem.setHorizontalGroup(glSystem.createParallelGroup()
+            .addComponent(pnlSystemGeneral));
+
+        glSystem.setVerticalGroup(glSystem.createSequentialGroup()
+            .addComponent(pnlSystemGeneral));
+
+        tabbedPane.add("システム", pnlSystem);
+
         pack();
-    }// </editor-fold>//GEN-END:initComponents
+        setResizable(false);
+        loadConfig();
+    }
 
     /**
      * @param args the command line arguments
      */
     public static void main(String args[]) {
         /* Set the Nimbus look and feel */
-        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
          */
         try {
-            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
+            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                 if ("Nimbus".equals(info.getName())) {
-                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
+                    UIManager.setLookAndFeel(info.getClassName());
                     break;
                 }
             }
-        } catch (ClassNotFoundException ex) {
-            java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
-        } catch (InstantiationException ex) {
-            java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
-        } catch (IllegalAccessException ex) {
-            java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
-        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
+        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
             java.util.logging.Logger.getLogger(ConfigDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
         }
-        //</editor-fold>
 
         /* Create and display the form */
         java.awt.EventQueue.invokeLater(new Runnable() {
@@ -1084,126 +860,78 @@ public class ConfigDialog extends javax.swing.JDialog {
         });
     }
     // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.ButtonGroup buttonGroup1;
-    private javax.swing.JButton btnVideoDir;
-    private javax.swing.JButton btnNgWordDel;
-    private javax.swing.JButton btnNgIdAdd;
-    private javax.swing.JButton btnNgIdDel;
-    private javax.swing.JButton btnSearchCommentAdd;
-    private javax.swing.JButton btnSearchCommentDel;
-    private javax.swing.JButton btnCommentDir;
-    private javax.swing.JButton btnOutputDir;
-    private javax.swing.JButton btnFfmpegPath;
-    private javax.swing.JButton btnFfmpegDllPath;
-    private javax.swing.JButton btnFontPath;
-    private javax.swing.JButton btnSearchVideoAdd;
-    private javax.swing.JButton btnSearchVideoDel;
-    private javax.swing.JButton btnNgWordAdd;
-    private javax.swing.JCheckBox cbProxyUse;
-    private javax.swing.JCheckBox cbCommentDisplaySizeDefault;
-    private javax.swing.JCheckBox cbOutputDisplayProgress;
-    private javax.swing.JCheckBox cbFontSizeArrangeDisable;
-    private javax.swing.JCheckBox cbCommentOpaque;
-    private javax.swing.JCheckBox cbVideoLocal;
-    private javax.swing.JCheckBox cbCommentLocal;
-    private javax.swing.JCheckBox cbOutputEnable;
-    private javax.swing.JCheckBox cbCommentSizeAuto;
-    private javax.swing.JCheckBox cbCommentMinSizeAuto;
-    private javax.swing.JCheckBox cbOutputCommentOverlay;
-    private javax.swing.JCheckBox cbFfmpegOptionResize;
-    private javax.swing.JCheckBox cbFfmpegOptionKeepAspect;
-    private javax.swing.JComboBox cmbFfmpegOptionFile;
-    private javax.swing.JLabel lblMail;
-    private javax.swing.JLabel lblOutputFileNamePattern;
-    private javax.swing.JLabel lblCommentSize;
-    private javax.swing.JLabel lblCommentSizeManual;
-    private javax.swing.JLabel lblCommentMinSize;
-    private javax.swing.JLabel lblCommentMinSizeManual;
-    private javax.swing.JLabel lblFfmpegPath;
-    private javax.swing.JLabel lblFfmpegDllPath;
-    private javax.swing.JLabel lblFfmpegOptionExtension;
-    private javax.swing.JLabel lblFfmpegOptionMain;
-    private javax.swing.JLabel lblFfmpegOptionIn;
-    private javax.swing.JLabel lblPassword;
-    private javax.swing.JLabel lblFfmpegOptionOut;
-    private javax.swing.JLabel lblFfmpegOptionAvfilter;
-    private javax.swing.JLabel lblFfmpegOptionResizeWidth;
-    private javax.swing.JLabel lblFfmpegOptionResizeHeight;
-    private javax.swing.JLabel lblCommentDisplayMax;
-    private javax.swing.JLabel lblCommentDisplayMaxManual;
-    private javax.swing.JLabel lblFontPath;
-    private javax.swing.JLabel lblFontIndex;
-    private javax.swing.JLabel lblFontShadow;
-    private javax.swing.JLabel lblSearchCache;
-    private javax.swing.JLabel lblProxyHost;
-    private javax.swing.JLabel lblProxyPort;
-    private javax.swing.JLabel lblVideoDir;
-    private javax.swing.JLabel lblVideoFileNamepattern;
-    private javax.swing.JLabel lblCommentDir;
-    private javax.swing.JLabel lblCommentFileNamePattern;
-    private javax.swing.JLabel lblOutputDir;
-    private javax.swing.JList lstSearchVideo;
-    private javax.swing.JList lstSearchComment;
-    private javax.swing.JList<String> lstNgWord;
-    private final DefaultListModel<String> mdlNgWord = new DefaultListModel<>();
-    private javax.swing.JList<String> lstNgId;
-    private final DefaultListModel<String> mdlNgId = new DefaultListModel<>();
-    private javax.swing.JPanel pnlNetwork;
-    private javax.swing.JPanel jPanel10;
-    private javax.swing.JPanel pnlFfmpegParam;
-    private javax.swing.JPanel pnlFfmpegParamOption;
-    private javax.swing.JPanel pnlNgSetting;
-    private javax.swing.JPanel pnlCommentStandard;
-    private javax.swing.JPanel pnlCommentAdvanced;
-    private javax.swing.JPanel pnlNgWord;
-    private javax.swing.JPanel pnlSearch;
-    private javax.swing.JPanel pnlSearchVideo;
-    private javax.swing.JPanel pnlSearchComment;
-    private javax.swing.JPanel pnlAccount;
-    private javax.swing.JPanel pnlNgId;
-    private javax.swing.JPanel pnlSearchCache;
-    private javax.swing.JPanel pnlProxy;
-    private javax.swing.JPanel pnlFile;
-    private javax.swing.JPanel pnlFileVideo;
-    private javax.swing.JPanel pnlFileComment;
-    private javax.swing.JPanel pnlFileOutput;
-    private javax.swing.JPanel pnlComment;
-    private javax.swing.JPanel pnlFfmpeg;
-    private javax.swing.JRadioButton rbFfmpegOptionFile;
-    private javax.swing.JRadioButton rbFfmpegOptionDirectInput;
-    private javax.swing.JScrollPane srcSearchVideo;
-    private javax.swing.JScrollPane srcSearchComment;
-    private javax.swing.JScrollPane scrNgWord;
-    private javax.swing.JScrollPane scrNgId;
-    private javax.swing.JTabbedPane jTabbedPane1;
-    private javax.swing.JTextField fldMail;
-    private javax.swing.JTextField fldOutputFileNamePattern;
-    private javax.swing.JTextField fldCommentSizeManual;
-    private javax.swing.JTextField fldCommentMinSizeManual;
-    private javax.swing.JTextField fldFfmpegPath;
-    private javax.swing.JTextField fldFfmpegDllPath;
-    private javax.swing.JTextField fldFfmpegOptionResizeWidth;
-    private javax.swing.JTextField fldFfmpegOptionResizeHeight;
-    private javax.swing.JTextField fldFfmpegOptionExtension;
-    private javax.swing.JTextField fldFfmpegOptionMain;
-    private javax.swing.JTextField fldFfmpegOptionIn;
-    private javax.swing.JTextField fldPassword;
-    private javax.swing.JTextField fldFfmpegOptionOut;
-    private javax.swing.JTextField fldFfmpegOptionAv;
-    private javax.swing.JTextField fldCommentDisplaySizeManual;
-    private javax.swing.JTextField fldFontPath;
-    private javax.swing.JTextField fldFontIndex;
-    private javax.swing.JTextField fldFontShadow;
-    private javax.swing.JTextField fldNgWord;
-    private javax.swing.JTextField fldNgId;
-    private javax.swing.JTextField fldSearchCache;
-    private javax.swing.JTextField fldProxyHost;
-    private javax.swing.JTextField fldProxyPort;
-    private javax.swing.JTextField fldVideoDir;
-    private javax.swing.JTextField fldVideoFileNamePattern;
-    private javax.swing.JTextField fldCommentDir;
-    private javax.swing.JTextField fldCommentFileNamePattern;
-    private javax.swing.JTextField fldOutputDir;
+
+    // ネットワーク
+    // ネットワーク - アカウント
+    private final JTextField fldMail;
+    private final JTextField fldPassword;
+    // ネットワーク - プロキシ
+    private final JCheckBox cbProxyUse;
+    private final JTextField fldProxyHost;
+    private final JTextField fldProxyPort;
+    // ファイル
+    // ファイル - 動画
+    private final JTextField fldVideoDir;
+    private final JButton btnVideoDir;
+    private final JTextField fldVideoFileNamePattern;
+    private final JCheckBox cbVideoLocal;
+    // ファイル - コメント
+    private final JTextField fldCommentDir;
+    private final JButton btnCommentDir;
+    private final JTextField fldCommentFileNamePattern;
+    private final JCheckBox cbCommentLocal;
+    // ファイル - 変換動画
+    private final JTextField fldOutputDir;
+    private final JTextField fldOutputFileNamePattern;
+    private final JButton btnOutputDir;
+    private final JCheckBox cbOutputEnable;
+    private final JCheckBox cbOutputCommentOverlay;
+    private final JCheckBox cbOutputDisplayProgress;
+    // ファイル - 禁則文字
+    private final JTextField fldReplaceFrom = new JTextField();
+    private final JTextField fldReplaceTo = new JTextField();
+    // コメント
+    // コメント
+    private final JCheckBox cbCommentSizeAuto;
+    private final JTextField fldCommentSizeManual;
+    private final JCheckBox cbCommentMinSizeAuto;
+    private final JTextField fldCommentMinSizeManual;
+    private final JCheckBox cbCommentDisplaySizeDefault;
+    private final JTextField fldCommentDisplaySizeManual;
+    // コメント - 高度な設定
+    private final JTextField fldFontPath;
+    private final JButton btnFontPath;
+    private final JTextField fldFontIndex;
+    private final JComboBox<String> cmbFontShadow = new JComboBox<>();
+    private final JCheckBox cbFontSizeArrangeDisable;
+    private final JCheckBox cbCommentOpaque;
+    // ffmpeg
+    // ffmpeg - ファイルパス
+    private final JTextField fldFfmpegPath;
+    private final JButton btnFfmpegPath;
+    private final JTextField fldFfmpegDllPath;
+    private final JButton btnFfmpegDllPath;
+    // ffmpeg - ffmpegパラメータ
+    private final FfmpegParamPanel pnlFfmpegParam = new FfmpegParamPanel();
+    // NG設定
+    // NG設定 - NGワード
+    private final NgRegisterPanel pnlNgWord = new NgRegisterPanel();
+    // NG設定 - NGID
+    private final NgRegisterPanel pnlNgId = new NgRegisterPanel();
+    // 検索
+    // 検索 - 動画検索対象フォルダ
+    private final DirectoryRegisterPanel pnlSearchVideo = new DirectoryRegisterPanel();
+    // 検索 - コメント検索対象フォルダ
+    private final DirectoryRegisterPanel pnlSearchComment = new DirectoryRegisterPanel();
+    // 検索 - キャッシュ更新(秒)
+    private final JTextField fldSearchCache;
+    // システム
+    private final JTextField fldSystemThreadDownload = new JTextField();
+    private final JTextField fldSystemWaitDownload = new JTextField();
+    private final JTextField fldSystemThreadConvert = new JTextField();
+    private final JTextField fldSystemTempDir = new JTextField();
+
+
     // End of variables declaration//GEN-END:variables
 
     private void loadConfig() {
@@ -1245,6 +973,12 @@ public class ConfigDialog extends javax.swing.JDialog {
         cbOutputCommentOverlay.setSelected(p.getOutputCommentOverlay());
         cbOutputDisplayProgress.setSelected(p.getOutputDisplayProgress());
 
+        /*
+         * ファイル - 禁則文字
+         */
+        fldReplaceFrom.setText(p.getReplaceFrom());
+        fldReplaceTo.setText(p.getReplaceTo());
+
         /**
          * コメント
          */
@@ -1260,7 +994,7 @@ public class ConfigDialog extends javax.swing.JDialog {
          */
         fldFontPath.setText(p.getFontPath());
         fldFontIndex.setText(p.getFontIndex());
-        // TODO 影の種類はコンボボックス
+        cmbFontShadow.setSelectedIndex(p.getFontShadow());
         cbFontSizeArrangeDisable.setSelected(p.getFontSizeArrangeDisable());
         cbCommentOpaque.setSelected(p.getCommentOpaque());
 
@@ -1273,31 +1007,31 @@ public class ConfigDialog extends javax.swing.JDialog {
         /*
          * ffmpeg - ffmpegパラメータ
          */
-        rbFfmpegOptionFile.setSelected(!p.getFfmpegParamInputDirect());
-        rbFfmpegOptionDirectInput.setSelected(p.getFfmpegParamInputDirect());
-        // TODO cmbFfmpegOptionFile
-        fldFfmpegOptionExtension.setText(p.getFfmpegExtension());
-        fldFfmpegOptionMain.setText(p.getFfmpegMainOption());
-        fldFfmpegOptionIn.setText(p.getFfmpegInOption());
-        fldFfmpegOptionOut.setText(p.getFfmpegOutOption());
-        fldFfmpegOptionAv.setText(p.getFfmpegAvOption());
-        cbFfmpegOptionResize.setSelected(p.getFfmpegResizeEnable());
-        fldFfmpegOptionResizeWidth.setText(p.getFfmpegResizeWidth());
-        fldFfmpegOptionResizeHeight.setText(p.getFfmpegResizeHeight());
-        cbFfmpegOptionKeepAspect.setSelected(p.getFfmpegKeepAspect());
+        pnlFfmpegParam.init(p);
 
         /*
          * NG 設定
          */
         final List<String> ngWords = p.getNgWords();
-        for (String s : ngWords) {
-            mdlNgWord.addElement(s);
-        }
+        pnlNgWord.init(ngWords);
         final List<String> ngIds = p.getNgIds();
-        for (String s : ngIds) {
-            mdlNgId.addElement(s);
-        }
+        pnlNgId.init(ngIds);
+
+        /*
+         * 検索
+         */
+        pnlSearchVideo.init(p.getSearchVideoDirs());
+        pnlSearchComment.init(p.getSearchCommentDirs());
+
+        /*
+         * システム
+         */
+        fldSystemThreadDownload.setText(Integer.toString(p.getSystemDownloadThread()));
+        fldSystemWaitDownload.setText(Integer.toString(p.getSystemDownloadWait()));
+        fldSystemThreadConvert.setText(Integer.toString(p.getSystemConvertThread()));
+        fldSystemTempDir.setText(p.getSystemTempDir());
     }
+
     private void saveConfig() {
         final Config p = Config.INSTANCE;
 
@@ -1338,7 +1072,13 @@ public class ConfigDialog extends javax.swing.JDialog {
         p.setOutputCommentOverlay(cbOutputCommentOverlay.isSelected());
         p.setOutputDisplayProgress(cbOutputDisplayProgress.isSelected());
 
-        /**
+        /*
+         * ファイル - 禁則文字
+         */
+        p.setReplaceFrom(fldReplaceFrom.getText());
+        p.setReplaceTo(fldReplaceTo.getText());
+
+        /*
          * コメント
          */
         p.setCommentSizeAutosize(cbCommentSizeAuto.isSelected());
@@ -1353,7 +1093,7 @@ public class ConfigDialog extends javax.swing.JDialog {
          */
         p.setFontPath(fldFontPath.getText());
         p.setFontIndex(fldFontIndex.getText());
-        // TODO 影の種類はコンボボックス
+        p.setFontShadow(cmbFontShadow.getSelectedIndex());
         p.setFontSizeArrangeDisable(cbFontSizeArrangeDisable.isSelected());
         p.setCommentOpaque(cbCommentOpaque.isSelected());
 
@@ -1366,23 +1106,42 @@ public class ConfigDialog extends javax.swing.JDialog {
         /*
          * ffmpeg - ffmpegパラメータ
          */
-        p.setFfmpegParamInputDirect(rbFfmpegOptionDirectInput.isSelected());
-        // TODO cmbFfmpegOptionFile
-        p.setFfmpegExtension(fldFfmpegOptionExtension.getText());
-        p.setFfmpegMainOption(fldFfmpegOptionMain.getText());
-        p.setFfmpegInOption(fldFfmpegOptionIn.getText());
-        p.setFfmpegOutOption(fldFfmpegOptionOut.getText());
-        p.setFfmpegAvOption(fldFfmpegOptionAv.getText());
-        p.setFfmpegResizeEnable(cbFfmpegOptionResize.isSelected());
-        p.setFfmpegResizeWidth(fldFfmpegOptionResizeWidth.getText());
-        p.setFfmpegResizeHeight(fldFfmpegOptionResizeHeight.getText());
-        p.setFfmpegKeepAspect(cbFfmpegOptionKeepAspect.isSelected());
+        final File fileFfmpegOption = pnlFfmpegParam.mdlFfmpegOption.getSelectedFile();
+        p.setFfmpegOptionFile(fileFfmpegOption != null ? fileFfmpegOption.getPath() : null);
+        p.setFfmpegExtension(pnlFfmpegParam.fldFfmpegOptionExtension.getText());
+        p.setFfmpegMainOption(pnlFfmpegParam.fldFfmpegOptionMain.getText());
+        p.setFfmpegInOption(pnlFfmpegParam.fldFfmpegOptionIn.getText());
+        p.setFfmpegOutOption(pnlFfmpegParam.fldFfmpegOptionOut.getText());
+        p.setFfmpegAvOption(pnlFfmpegParam.fldFfmpegOptionAv.getText());
+        p.setFfmpegResizeEnable(pnlFfmpegParam.cbFfmpegOptionResize.isSelected());
+        p.setFfmpegResizeWidth(pnlFfmpegParam.fldFfmpegOptionResizeWidth.getText());
+        p.setFfmpegResizeHeight(pnlFfmpegParam.fldFfmpegOptionResizeHeight.getText());
+        p.setFfmpegKeepAspect(pnlFfmpegParam.cbFfmpegOptionKeepAspect.isSelected());
 
         /*
          * NG 設定
          */
-        p.setNgWords(Arrays.asList((String[]) mdlNgWord.toArray()));
-        p.setNgIds(Arrays.asList((String[])mdlNgId.toArray()));
+        p.setNgWords(pnlNgWord.getAllElements());
+        p.setNgIds(pnlNgId.getAllElements());
 
+        /*
+         * 検索
+         */
+        p.setSearchVideoDirs(pnlSearchVideo.getAllElements());
+        p.setSearchCommentDirs(pnlSearchComment.getAllElements());
+
+        /*
+         * システム
+         */
+        p.setSystemDownloadThread(Integer.parseInt(fldSystemThreadDownload.getText()));
+        p.setSystemDownloadWait(Integer.parseInt(fldSystemWaitDownload.getText()));
+        p.setSystemConvertThread(Integer.parseInt(fldSystemThreadConvert.getText()));
+        p.setSystemTempDir(fldSystemTempDir.getText());
+
+        try {
+            p.save();
+        } catch (ConfigurationException ex) {
+            logger.log(Level.SEVERE, "コンフィグファイル保存に失敗", ex);
+        }
     }
 }