2017-09-13 25 views
-1

如何將GUI類中的實際複選框狀態(true/false)傳遞給另一個類?我只想在GUI中選擇複選框的情況下運行部分代碼。我想它必須是如果聲明(下面高亮部分),但我不能得到它的工作。另一個類中的Java複選框狀態

public class csvtoxls { 

    public static void main() throws IOException { 
    //here you enter the path to your directory. 
    //for example: Path workDir = Paths.get("C:\\Users\\Kamil\Desktop\\csvtoxlspython\\Nowy folder (2)") 
    JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); 
    jfc.setDialogTitle("Wybierz folder do konwersji: "); 
    jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    jfc.setAcceptAllFileFilterUsed(false); 
    int returnValue = jfc.showSaveDialog(null); 
    if (returnValue == JFileChooser.APPROVE_OPTION) { 
     if (jfc.getSelectedFile().isDirectory()) { 
      System.out.println("You selected the directory: " + jfc.getSelectedFile()); 

      String z; 
      //@SuppressWarnings("deprecation") 
      Path workDir = jfc.getSelectedFile().toPath(); 
      System.out.println(workDir); 
      //Path workDir = FileSystems.getDefault(jfc.getCurrentDirectory()).jfc.getCurrentDirectory(); 

      //Path workDir = Paths.get(gui.pickPath(jfc)); 

      File dirg = jfc.getSelectedFile(); 
      //String str = dirg.getPath(); 

      // ************* CODE WITH ISSUE ************* 
      if TextAreaLogProgram.checkbox.isSelected() { 
       try { 
        Thread.sleep(5000);     //1000 milliseconds is one second. 
       } catch(InterruptedException ex) { 
        Thread.currentThread().interrupt(); 
       } 
       String str = dirg.getPath(); 
       delfiles td = new delfiles(); 

       td.deleteFiles(str + "/", ".csv"); 
       System.out.println("SUCCESS!"); 
       msgbox.infoBox("SUCCES!", "CSVtoXLS"); 
      } 

GUI類:

public class TextAreaLogProgram extends JFrame { 
    private JTextArea textArea; 
    private JButton buttonStart = new JButton("CONVERT"); 
    private JButton buttonClear = new JButton("CLEAR"); 
    private PrintStream standardOut; 

    public TextAreaLogProgram() { 
     super("CSVtoXLS"); 
     JCheckBox checkbox = new JCheckBox(); 
     add(checkbox); 
     checkbox.setText("Delete files"); 
     checkbox.setSelected(true); 
+0

請改善您的問題,使其更容易回答,而無需猜測。您不會顯示運行「TextAreaLogProgram」類的位置或方式,也不會顯示您創建「TextAreaLogProgram」對象的位置,並且發佈的代碼格式不好,從而使代碼難以閱讀和遵循。你真的想讓人們很容易幫忙,所以這樣做對你最有利。另請參閱[幫助]的如何解答問題部分,瞭解如何改進問題。 –

+0

但話雖如此,這個問題歸結爲檢查一個對象的狀態,另一個對象的關鍵是***引用***,獲得另一個對象的引用。此外,JCheckBox不應該是局部變量,而應該是TextAreaLogProgram類的實例字段。 –

+0

我編輯並格式化了您的發佈代碼。 –

回答

2

你的其他類需要的方法或構造函數的參數,能夠從其他類

更多細節

Passing Information to a Method or a Constructor接受該值

其他問題:

  • 您的程序結構需要完全重做。現在你的主要方法太大了,這意味着你在靜態世界中做得太多了,而不是使用Java來獲得最佳的OOP優勢。
  • 在甚至考慮創建GUI之前,首先要創建程序需要的非GUI「模型」類。像所有的類一樣,這些應該有最小的靜態字段和方法,並努力遵循面向對象的最佳實踐
  • 您的GUI代碼中有一個Thread.sleep,這與Swing GUI不兼容,整個圖形用戶界面進入休眠狀態,使其無法響應。如果你想Swing延遲,使用Swing Timer(谷歌優秀教程)
  • 你正在嘗試檢查複選框,就好像它是TextAreaLogProgram類的靜態字段一樣。這不是一個靜態領域,事實上它甚至不是一個領域的類。
  • 上述事實表明,通過學習關於面向對象編程和Java的入門教程,您將從中受益匪淺 - 通過在首次理解Java基礎知識之前嘗試創建GUI 。再次,你不會爲此付出的努力感到後悔。
  • 無論你做什麼,不要使JCheckBox成爲一個靜態字段,並嘗試以這種方式訪問​​它。這將導致意大利麪代碼和錯誤風險增加。
  • 取而代之,使其成爲TextAreaLogProgram類的非靜態(實例)專用字段,併爲該類提供getter方法以允許其他對象訪問JCheckgbox的狀態。
  • 關於代碼和問題,還有很多可以提及的內容,但是現在可以做到。
+0

他可能需要更多的,因爲JCheckBox看起來是一個有限範圍的本地字段,而不是一個實例字段。 –

+1

隨意擴展 - 我只是試圖讓OP來研究自己的問題,並做出一些實際的嘗試來回答它。根據提供的代碼,他們也將不得不做一些重大的重構,使其工作 – MadProgrammer

+1

一些擴展已完成。隨時編輯/展開/改進/刪除 –