Java: ссылка на конструктор в другом классе - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать программу, которая автоматически извлекает ссылку из файла. json. Я новичок в программировании и пытаюсь организовать код, чтобы другие люди могли его легче понять.

У меня есть конструктор под названием Gui, в который добавляется кнопка закрытия. и файловый менеджер с AWT. Чтобы организовать проект, я хочу создать другой класс для извлечения ссылки, но я не могу понять, как я могу ссылаться на TextField с путем к файлу в конструкторе класса Gui.

Мне нужно получить текст от fe в другом классе.

Я искал в Интернете несколько часов, но не могу найти ничего, что мне подходит.

public class Gui extends Frame {

    public Gui() {
        Frame gui = new Frame(Strings.name);

        // add "close" button
        Button cls = new Button(Strings.close);
        cls.setBounds(30, 30, 100, 30);
        gui.add(cls);
        cls.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);

            }
        });

        // file explorer
        TextField fe = new TextField(Strings.file);  
        fe.setBounds(50,100, 200,30);  
        fe.setLocation(75, 75);
        gui.add(fe);
        fe.addMouseListener(new MouseListener() {

            public void mouseReleased(MouseEvent e) {}

            public void mousePressed(MouseEvent e) {}

            public void mouseExited(MouseEvent e) {}

            public void mouseEntered(MouseEvent e) {}

            @Override
            public void mouseClicked(MouseEvent e) {
                FileDialog fd = new FileDialog(gui, Strings.cfile, FileDialog.LOAD);
                fd.setVisible(true);
                fe.setText(fd.getDirectory());
            }
        });

        // make application work
        gui.addWindowListener(new WindowAdapter(){  
               public void windowClosing(WindowEvent e) {  
                   System.exit(0);
               }  
        }); 

        gui.setSize(1200, 900);
        gui.setLayout(null);
        gui.setVisible(true);
    }

}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

вы должны поместить свои ссылки на ваши классы, например, текст вне вашего конструктора, например,

public class Gui extends Frame {
// your reference
private TextField text;
Gui() {
// now instantiate your textField
text = new TextField();
}
// getter method that returns your textField
public TextField getTextField() {
return text;
}
}

, тогда вы можете получить свой текст из вашего gui.

Gui gui = new Gui();
TextField field =gui.getTextField();

Я рекомендую изучить основы java программирования, а затем определить более масштабный проект для себя.

0 голосов
/ 06 апреля 2020

Можно попробовать со следующими обновлениями

public class Gui extends Frame {
//create an inner class
class MyProcess
{
    MyProcess(String s)
    {
        System.out.println("do something with s="+s);
    }
}

public static void main(String args[])
{
    new Gui();
}

...

@Override
public void mouseClicked(MouseEvent e) {
    FileDialog fd = new FileDialog(gui, "file", FileDialog.LOAD);
    fd.setVisible(true);
    fe.setText(fd.getDirectory());
    //use the inner class as needed
    new MyProcess(fe.getText());
    }


Возможный вывод на консоль do something with s=D:\some_path\

Пожалуйста, обратите внимание, что это не обязательно внутренний класс, может быть и внешним. Это зависит только от вашего дизайна. Возможно, также в будущем для графических c интерфейсов вы могли бы провести некоторые исследования: JavaFx, Swing, может быть Eclipse Graphics Library. Awt библиотека является самой древней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...