2017-09-13 53 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

一些扩展已完成。随时编辑/展开/改进/删除 –

相关问题