2016-07-06 7 views
0

私はJavaでGUIを書いていますが、JTableとJTableを操作するための2つのボタンがあります。 。 2つのボタンの1つがクリックされるたびに、ユーザが情報を入力し、続いてデータが保存されるときに保存ボタンをクリックするパネルが現れるべきである。データを保存してその中にそのデータを含まない新しいパネルを作成する

example screenshot

それは私が編集行のボタンがデータを変更する必要がありながら、[行の追加]ボタンをJTableのに新しい行を追加したい可視フレームのデザインから明らかであるかもしれませんが。私は保存する]をクリックしたときに、私は開いて新しいJDialogの中に(好ましくは、メモリ内の)入力されたものをデータ保存する方法

:だからここ

は私の二つの問題があります。今私はsaveData()メソッドとというグローバルをlastDataとして使用します。より良い方法はありますか?私はこれを働かせることができません。

どのように私は、私は(これで以前の入力なし)NEW JDialogの私は二つのボタンのいずれかをクリックするたびに開くことを確認してください。彼らは彼らが開くパネルのために同じテンプレートを使用します。 違いは、行の編集ボタンはJTableのコンテンツを取り込み、それをテキストフィールドに入力することです(このMCVEには表示されません)。私の問題は、Add Row JDialogで何かを入力すると、次回にダイアログを開いたときに入力が残っているということです。すべてのオープン時に新しいJDialogを作成するか、JDialogからのデータを最善の方法でクリアするにはどうすればよいですか?ここで

はMCVEだ:私は私自身の例では、テーブルに追加および編集行を作成し実施していると、彼らはこのMCVEから除外されている小さなサイドノートとして

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.Window; 
import java.awt.Dialog.ModalityType; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.border.TitledBorder; 
import javax.swing.table.DefaultTableModel; 

public class Test extends JPanel{ 

    private dialogTemplate diagPanel1 = new dialogTemplate(); 
    private dialogTemplate diagPanel2 = new dialogTemplate(); 
    Object[] columnIdentifiers = { 
     "id", 
     "imei", 
    }; 

    Object[][] data = { 
     {"1", "123"}, 
     {"2", "123"}, 
     {"3", "123"} 
    }; 

    private JDialog addDialog; 
    private JDialog editDialog; 
    private static DefaultTableModel model; 
    private JTable table; 

    public Test(){ 
     setLayout(new BorderLayout()); 
     JPanel pane = new JPanel(new BorderLayout()); 

     JButton addRow = new JButton("Add Row"); 
     addRow.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       openAddRowPane("Add Row"); 
      } 
     }); 
     JButton editRow = new JButton("Edit Row"); 
     editRow.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       openEditRowPane("Edit Row"); 
      } 
     }); 

     JPanel buttonPane = new JPanel(new GridLayout(0, 1)); 
     TitledBorder buttonBorder = new TitledBorder("Buttons"); 
     buttonPane.setBorder(buttonBorder); 

     buttonPane.add(addRow); 
     buttonPane.add(editRow); 

     model = new DefaultTableModel(); 
     model.setColumnIdentifiers(columnIdentifiers); 
     JTable table = new JTable(model); 

     for(int i = 0; i < data.length; i++){ 
      model.insertRow(i, data[i]); 
     } 

     JScrollPane scrollPane = new JScrollPane(table); 

     pane.add(buttonPane, BorderLayout.LINE_END); 
     pane.add(scrollPane, BorderLayout.CENTER); 

     add(pane, BorderLayout.CENTER); 
    } 

    public void openAddRowPane(String name){ 
     if(addDialog == null){ 
      Window win = SwingUtilities.getWindowAncestor(this); 
      if(win != null){ 
       addDialog = new JDialog(win, name, ModalityType.APPLICATION_MODAL); 
       addDialog.getContentPane().add(diagPanel1); 
       addDialog.pack(); 
       addDialog.setLocationRelativeTo(null); 
      } 
     } 
     addDialog.setVisible(true); 
     printRow(diagPanel1.getData()); 
    } 

    public void openEditRowPane(String name){ 
     if(editDialog == null){ 
      Window win = SwingUtilities.getWindowAncestor(this); 
      if(win != null){ 
       editDialog = new JDialog(win, name, ModalityType.APPLICATION_MODAL); 
       editDialog.getContentPane().add(diagPanel2); 
       editDialog.pack(); 
       editDialog.setLocationRelativeTo(null); 
      } 
     } 
     editDialog.setVisible(true); 
     printRow(diagPanel2.getData()); 
    } 

    public void printRow(Object[] data){ 
     int length = data.length; 
     String s = "["; 
     for(int i = 0; i < length; i++){ 
      if(i == length-1){ 
       s += data[i].toString() + "]"; 
      } else { 
       s += data[i].toString() + ", "; 
      } 
     } 
     System.out.println(s); 
    } 

    public static void createAndShowGUI(){ 
     JFrame frame = new JFrame("MCVE");  
     Template_StackOverflowExample mainPanel = new  Template_StackOverflowExample(); 
     frame.add(mainPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

class dialogTemplate extends JPanel{ 

    private JComponent[] content; 
    private String[] labelHeaders = { 
     "ID:", 
     "IMEI:", 
    }; 

    private Object[] lastData; 

    public dialogTemplate(){ 
     JPanel diagTemplate = new JPanel(); 
     diagTemplate.setLayout(new BorderLayout()); 
     JPanel rowContent = new JPanel(new GridLayout(0, 2)); 

     JLabel idLabel = null; 
     JLabel imeiLabel = null; 

     JLabel[] labels = { 
      idLabel, 
      imeiLabel, 
     }; 

     JTextField idTextField = new JTextField(20); 
     JTextField imeiTextField = new JTextField(20); 

     content = new JComponent[] { 
      idTextField, 
      imeiTextField, 
     }; 

     for(int i = 0; i < labels.length; i++){ 
      labels[i] = new JLabel(labelHeaders[i]); 
      rowContent.add(labels[i]); 
      rowContent.add(content[i]); 
      labels[i].setLabelFor(content[i]); 
     } 

     JButton save = new JButton("Save"); 
     save.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       saveData(); 
       closeWindow(); 
      } 
     }); 
     JButton cancel = new JButton("Cancel"); 
     cancel.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       closeWindow(); 
      } 
     }); 

     JPanel buttonPane = new JPanel(new GridLayout(0, 1, 5, 5)); 
     buttonPane.add(save); 
     buttonPane.add(cancel); 

     buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 

     diagTemplate.add(buttonPane, BorderLayout.PAGE_END); 
     diagTemplate.add(rowContent, BorderLayout.CENTER); 

     add(diagTemplate); 
    } 

    public void saveData(){ 
     lastData = new Object[content.length]; 

     for(int i = 0; i < lastData.length; i++){ 
      if(content[i] instanceof JTextField){ 
       JTextField temp = (JTextField) content[i]; 
       lastData[i] = temp.getText(); 
      } 
     } 
    } 

    public Object[] getData(){ 
     return lastData; 
    } 

    public void closeWindow(){ 
     Window win = SwingUtilities.getWindowAncestor(this); 
     if(win != null) { 
      win.dispose(); 
     } 
    } 
} 

。この例では、私はちょうど私がいくつかの "データ"を取得していることを知りたいので、printRow()メソッドです。

+0

コンパイルされません。 JDialogの名前は矛盾しています。 – c0der

+0

申し訳ありません。できるだけ早くそれを固定する。 – Zeliax

+0

@ c0der:これで修正されるはずです。 – Zeliax

答えて

1

コンパイルエラーを修正し、2番目の質問に回答しました。コメントを参照してください:

import java.awt.BorderLayout; 
import java.awt.Dialog.ModalityType; 
import java.awt.GridLayout; 
import java.awt.Window; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.border.TitledBorder; 
import javax.swing.table.DefaultTableModel; 

public class Template_StackOverflowExample extends JPanel{ 

    //changed type to DialogTemplate so you can use getData() 
    //Alternatively you can keep the type as JPanle and cast: 
    // ((DialogTemplate)diagPanel1).getData() 
    private DialogTemplate diagPanel1 = new DialogTemplate(); 
    private DialogTemplate diagPanel2 = new DialogTemplate(); 

    Object[] columnIdentifiers = { 
     "id", 
     "imei", 
    }; 

    Object[][] data = { 
     {"1", "123"}, 
     {"2", "123"}, 
     {"3", "123"} 
    }; 

    private JDialog addDialog; 
    private JDialog editDialog; 
    private static DefaultTableModel model; 
    private JTable table; 

    public Template_StackOverflowExample(){ 
     setLayout(new BorderLayout()); 
     JPanel pane = new JPanel(new BorderLayout()); 

     JButton addRow = new JButton("Add Row"); 
     addRow.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       openAddRowPane("Add Row"); 
      } 
     }); 
     JButton editRow = new JButton("Edit Row"); 
     editRow.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       openEditRowPane("Edit Row"); 
      } 
     }); 

     JPanel buttonPane = new JPanel(new GridLayout(0, 1)); 
     TitledBorder buttonBorder = new TitledBorder("Buttons"); 
     buttonPane.setBorder(buttonBorder); 

     buttonPane.add(addRow); 
     buttonPane.add(editRow); 

     model = new DefaultTableModel(); 
     model.setColumnIdentifiers(columnIdentifiers); 
     JTable table = new JTable(model); 

     for(int i = 0; i < data.length; i++){ 
      model.insertRow(i, data[i]); 
     } 

     JScrollPane scrollPane = new JScrollPane(table); 

     pane.add(buttonPane, BorderLayout.LINE_END); 
     pane.add(scrollPane, BorderLayout.CENTER); 

     add(pane, BorderLayout.CENTER); 
    } 

    public void openAddRowPane(String name){ 
     //remove to make a new JDiag each time 
     //if(addDialog == null){ 
      Window win = SwingUtilities.getWindowAncestor(this); 
      //if(win != null){ //it is ok if win is null 
       addDialog = new JDialog(win, name, ModalityType.APPLICATION_MODAL); 
       addDialog.getContentPane().add(diagPanel1); 
       addDialog.pack(); 
       addDialog.setLocationRelativeTo(null); 
      //} 
     //} 
     addDialog.setVisible(true); 
     printRow(diagPanel1.getData()); 
    } 

    public void openEditRowPane(String name){ 
     //remove to make a new JDiag each time 
     //if(editDialog == null){ 
      Window win = SwingUtilities.getWindowAncestor(this); 
      //if(win != null){//it ok if win = null 
       editDialog = new JDialog(win, name, ModalityType.APPLICATION_MODAL); 
       editDialog.getContentPane().add(diagPanel2); 
       editDialog.pack(); 
       editDialog.setLocationRelativeTo(null); 
      //} 
     //} 
     editDialog.setVisible(true); 
     printRow(diagPanel2.getData()); 
    } 

    public void printRow(Object[] data){ 

     //add null protection 
     if(data == null) { 
      return; 
     } 
     int length = data.length; 
     String s = "["; 
     for(int i = 0; i < length; i++){ 
      if(i == (length-1)){ 
       s += data[i].toString() + "]"; 
      } else { 
       s += data[i].toString() + ", "; 
      } 
     } 
     System.out.println(s); 
    } 

    public static void createAndShowGUI(){ 
     JFrame frame = new JFrame("MCVE"); 
     Template_StackOverflowExample mainPanel = new  Template_StackOverflowExample(); 
     frame.add(mainPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

//changed name to start with capital letter 
class DialogTemplate extends JPanel{ 

    private JComponent[] content; 
    private String[] labelHeaders = { 
     "ID:", 
     "IMEI:", 
    }; 

    private Object[] lastData; 

    public DialogTemplate(){ 
     JPanel diagTemplate = new JPanel(); 
     diagTemplate.setLayout(new BorderLayout()); 
     JPanel rowContent = new JPanel(new GridLayout(0, 2)); 

     JLabel idLabel = null; 
     JLabel imeiLabel = null; 

     JLabel[] labels = { 
      idLabel, 
      imeiLabel, 
     }; 

     JTextField idTextField = new JTextField(20); 
     JTextField imeiTextField = new JTextField(20); 

     content = new JComponent[] { 
      idTextField, 
      imeiTextField, 
     }; 

     for(int i = 0; i < labels.length; i++){ 
      labels[i] = new JLabel(labelHeaders[i]); 
      rowContent.add(labels[i]); 
      rowContent.add(content[i]); 
      labels[i].setLabelFor(content[i]); 
     } 

     JButton save = new JButton("Save"); 
     save.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       saveData(); 
       closeWindow(); 
      } 
     }); 
     JButton cancel = new JButton("Cancel"); 
     cancel.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       closeWindow(); 
      } 
     }); 

     JPanel buttonPane = new JPanel(new GridLayout(0, 1, 5, 5)); 
     buttonPane.add(save); 
     buttonPane.add(cancel); 

     buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 

     diagTemplate.add(buttonPane, BorderLayout.PAGE_END); 
     diagTemplate.add(rowContent, BorderLayout.CENTER); 

     add(diagTemplate); 
    } 

    public void saveData(){ 
     lastData = new Object[content.length]; 

     for(int i = 0; i < lastData.length; i++){ 
      if(content[i] instanceof JTextField){ 
       JTextField temp = (JTextField) content[i]; 
       lastData[i] = temp.getText(); 
      } 
     } 
    } 

    public Object[] getData(){ 
     return lastData; 
    } 

    public void closeWindow(){ 
     Window win = SwingUtilities.getWindowAncestor(this); 
     if(win != null) { 
      win.dispose(); 
     } 
    } 
} 

(ところで:なぜ、あなたは新しいDIAGたびに開くようにしたいですか?)

あなたに私はJDialogのサブを追加した2番目の質問に対処するために - クラス、のgetData()機能を持つが。コメントを見る:

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.Window; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.border.TitledBorder; 
import javax.swing.table.DefaultTableModel; 

public class Template_StackOverflowExample extends JPanel{ 

    //changed type to DialogTemplate so you can use getData() 
    //Alternatively you can keep the type as JPanle and cast: 
    // ((DialogTemplate)diagPanel1).getData() 
    private DialogTemplate diagPanel1 = new DialogTemplate(); 
    private DialogTemplate diagPanel2 = new DialogTemplate(); 

    Object[] columnIdentifiers = { 
      "id", 
      "imei", 
    }; 

    Object[][] data = { 
      {"1", "123"}, 
      {"2", "123"}, 
      {"3", "123"} 
    }; 

    //changed type to JDialog subclass 
    private Dialog addDialog; 
    private Dialog editDialog; 

    private static DefaultTableModel model; 
    private JTable table; 

    public Template_StackOverflowExample(){ 
     setLayout(new BorderLayout()); 
     JPanel pane = new JPanel(new BorderLayout()); 

     JButton addRow = new JButton("Add Row"); 
     addRow.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       addDialog = openDialog("Add Row"); 
       Object[] getData = addDialog.getData(); 
       printRow(getData); 
      } 
     }); 
     JButton editRow = new JButton("Edit Row"); 
     editRow.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       editDialog = openDialog("Edit Row"); 
       Object[] getData = editDialog.getData(); 
       printRow(getData); 

      } 
     }); 

     JPanel buttonPane = new JPanel(new GridLayout(0, 1)); 
     TitledBorder buttonBorder = new TitledBorder("Buttons"); 
     buttonPane.setBorder(buttonBorder); 

     buttonPane.add(addRow); 
     buttonPane.add(editRow); 

     model = new DefaultTableModel(); 
     model.setColumnIdentifiers(columnIdentifiers); 
     JTable table = new JTable(model); 

     for(int i = 0; i < data.length; i++){ 
      model.insertRow(i, data[i]); 
     } 

     JScrollPane scrollPane = new JScrollPane(table); 

     pane.add(buttonPane, BorderLayout.LINE_END); 
     pane.add(scrollPane, BorderLayout.CENTER); 

     add(pane, BorderLayout.CENTER); 
    } 

    public Dialog openDialog(String name){ 

     Window win = SwingUtilities.getWindowAncestor(this); 
     return new Dialog(win, new DialogTemplate(), name); 
    } 

    public void printRow(Object[] data){ 

     //add null protection 
     if(data == null) { 
      return; 
     } 
     int length = data.length; 
     String s = "["; 
     for(int i = 0; i < length; i++){ 
      if(i == (length-1)){ 
       s += data[i].toString() + "]"; 
      } else { 
       s += data[i].toString() + ", "; 
      } 
     } 
     System.out.println(s); 
    } 

    public static void createAndShowGUI(){ 
     JFrame frame = new JFrame("MCVE"); 
     Template_StackOverflowExample mainPanel = new  Template_StackOverflowExample(); 
     frame.add(mainPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

//subclassed JDialog to add get data functionality 
class Dialog extends JDialog { 

    DialogTemplate diagPanel; 

    Dialog(Window win, DialogTemplate diagPanel, String name) { 

     super(win, name, ModalityType.APPLICATION_MODAL); 
     this.diagPanel = diagPanel; 
     getContentPane().add(diagPanel); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    Object[] getData(){ 
     return diagPanel.getData(); 
    } 
} 


//changed name to start with capital letter 
class DialogTemplate extends JPanel{ 

    private JComponent[] content; 
    private String[] labelHeaders = { 
      "ID:", 
      "IMEI:", 
    }; 

    private Object[] lastData; 

    public DialogTemplate(){ 
     JPanel diagTemplate = new JPanel(); 
     diagTemplate.setLayout(new BorderLayout()); 
     JPanel rowContent = new JPanel(new GridLayout(0, 2)); 

     JLabel idLabel = null; 
     JLabel imeiLabel = null; 

     JLabel[] labels = { 
       idLabel, 
       imeiLabel, 
     }; 

     JTextField idTextField = new JTextField(20); 
     JTextField imeiTextField = new JTextField(20); 

     content = new JComponent[] { 
       idTextField, 
       imeiTextField, 
     }; 

     for(int i = 0; i < labels.length; i++){ 
      labels[i] = new JLabel(labelHeaders[i]); 
      rowContent.add(labels[i]); 
      rowContent.add(content[i]); 
      labels[i].setLabelFor(content[i]); 
     } 

     JButton save = new JButton("Save"); 
     save.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       saveData(); 
       closeWindow(); 
      } 
     }); 
     JButton cancel = new JButton("Cancel"); 
     cancel.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       closeWindow(); 
      } 
     }); 

     JPanel buttonPane = new JPanel(new GridLayout(0, 1, 5, 5)); 
     buttonPane.add(save); 
     buttonPane.add(cancel); 

     buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 

     diagTemplate.add(buttonPane, BorderLayout.PAGE_END); 
     diagTemplate.add(rowContent, BorderLayout.CENTER); 

     add(diagTemplate); 
    } 

    public void saveData(){ 
     lastData = new Object[content.length]; 

     for(int i = 0; i < lastData.length; i++){ 
      if(content[i] instanceof JTextField){ 
       JTextField temp = (JTextField) content[i]; 
       lastData[i] = temp.getText(); 
      } 
     } 
    } 

    public Object[] getData(){ 
     return lastData; 
    } 

    public void closeWindow(){ 
     Window win = SwingUtilities.getWindowAncestor(this); 
     if(win != null) { 
      win.dispose(); 
     } 
    } 
} 
+0

乾杯。私はトップポストにもコンパイルエラーを修正しました。私はすでに問題を修正しましたが、JDialogのサブクラスなど、実装したいと思うあなたの提案にいくつかの素敵な変更があります。私はJDialogをクリアするためのメソッドとそれを "取得"した後にデータをリセットするメソッドを作成しました。私はあなたの提案にそれを適応させたら、コードで返信します。 DW。 ) – Zeliax

+0

さらに、私はもともと、新しいダイアログを作成すると、パネルが新しく作成されたときにパネルに何も含まれていないことを確認する良い方法になると思っていました。しかし、 'reset()'メソッドを使うほうがより良く動作します。 – Zeliax

+1

投票のおかげで(0:。私は私の答えの最初のコードをコピーして、もう一度それを実行します)私は両方のボタンからプリントアウトを取得しました。 BTW2:編集モードでは、関連する行の現在のデータでJDialogを読み込むことができます。BTW3:MCVEをMに保つことができるより高速な応答を得るために、このコードではMCVEとボタンの両方で十分です。 – c0der

1

TableModelを使用してモデルにデータを追加する必要があります。次に、編集用のデータを入力します。ユーザーは行を選択して編集をクリックします。その場合、モデルから選択した行を取得し、編集時に表示するダイアログに読み込むことができます。私は答えにコードを与えていない。あなたがコードの助けを必要とするかどうか教えてください。

+0

私が質問で述べたように、私はすでにコードのこの部分が働いています。それは私の問題であるデータの保存と新しいパネルのオープンです。 – Zeliax

関連する問題