另一个类中的Java复选框状态

时间:2017-09-13 21:28:01

标签: java swing class jcheckbox

如何将实际的复选框状态(true / false)从GUI类传递到另一个类?我只想在选择GUI中的复选框时运行部分代码。我想它必须是if语句(下面的高亮部分),但我不能让它工作。

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);

1 个答案:

答案 0 :(得分:2)

你的另一个类需要一个带参数的方法或构造函数才能接受来自另一个类的值

有关详细信息,请参阅Passing Information to a Method or a Constructor

其他问题:

  • 您的程序结构需要完全重做。现在你的主要方法太大了,这意味着你在静态世界中做得太多而没有使用Java来获得最佳的OOP优势。
  • 在考虑创建GUI之前,首先要创建程序所需的非GUI“模型”类。与所有类一样,这些应该具有最少的静态字段和方法,并努力遵循面向对象的最佳实践
  • 你的GUI代码中有一个Thread.sleep,这对于Swing GUI来说效果不佳,因为这会使整个GUI处于睡眠状态,从而使其无响应。如果你想要Swing延迟,请使用Swing Timer(google上的优秀教程)
  • 您正在尝试选中该复选框,就好像它是TextAreaLogProgram类的静态字段一样。它不是一个静态领域,事实上它甚至不是一个领域。
  • 您正在执行上述操作这一事实表明您将从学习面向对象编程和Java的入门教程中获益匪浅 - 您通过在首次理解Java基础知识之前尝试创建GUI来将其放在首位。同样,你不会后悔这样做的努力。
  • 无论你做什么,使JCheckBox成为静态字段,并尝试以这种方式访问​​它。这将导致意大利面条代码和增加的错误风险。
  • 相反,使其成为TextAreaLogProgram类的非静态(实例)私有字段,并为该类提供一个getter方法,以允许其他对象访问JCheckgbox的状态。
  • 关于你的代码和问题还有很多可以提及的......但是现在这样做。