Как сделать строку доступной в других классах

#java #string #class

#java #строка #класс

Вопрос:

Мне удалось преобразовать входные данные в строку, которая доступна в том же классе, но я хочу сделать так, чтобы входная строка могла быть доступна в разных классах. Текущий класс — OpenDetails, и я хочу, чтобы строка selectedFile была доступна в другом классе с именем OpenFileInfo. Как бы мне настроить ее так, чтобы результат из selectedFile можно было сохранить либо в selectedRequirement, либо сделать его доступным в других классах?

Я новичок в Java, поэтому, если кто-то может помочь, спасибо.

 import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class OpenFile
{
    String selectedRequirement = "";

    public static void main(String a[])
    {

    JFrame parent = new JFrame();
    String selectedFile;
    selectedFile = JOptionPane.showInputDialog(parent, "Add a new module");


    if(selectedFile.equalsIgnoreCase(selectedFile)){
    //Makes the user input case insensitive
    }

        final JTextArea edit = new JTextArea(60,100);

        JButton read = new JButton("Open "  selectedFile  ".txt");
        read.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    FileReader reader = new FileReader(selectedFile   ".txt");
                    BufferedReader br = new BufferedReader(reader);
                    edit.read( br, null );
                    br.close();
                    edit.requestFocus();
                }
                catch(Exception e2) { System.out.println(e2); }
            }
        });

        JButton write = new JButton("Save "  selectedFile   ".txt");
        write.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    FileWriter writer = new FileWriter(selectedFile   ".txt");
                    BufferedWriter bw = new BufferedWriter( writer );
                    edit.write( bw );
                    bw.close();
                    edit.setText("");
                    edit.requestFocus();
                }
                catch(Exception e2) {}
            }
        });
                System.out.println("Module: "   selectedFile);

        JFrame frame = new JFrame("Requirements");
        frame.getContentPane().add( new JScrollPane(edit), BorderLayout.NORTH );
        frame.getContentPane().add(read, BorderLayout.WEST);
        frame.getContentPane().add(write, BorderLayout.EAST);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    } 
}
  

Ответ №1:

Поскольку вы работаете из статического контекста, вам необходимо определить selectedRequirement как статический:

 private static String selectedRequirement = "";
  

Чтобы сделать selectedRequirement равным selectedFile, просто скажите selectedRequirement = selectedFile; в конце основной функции (возможно, там, где вы ее уже печатаете).

Чтобы сделать selectedRequirement доступным для других классов, вам нужно создать «функцию получения» в классе OpenFile (вне основной функции), например:

 public String getSelectedRequirement(){
    return selectedRequirement;
}
  

Как указано в комментариях, вам (или любому, кто найдет это в будущем) было бы неплохо ознакомиться с некоторыми руководствами по получателям, установщикам и общей инкапсуляции.

Комментарии:

1. Посмотрите на установщики и геттеры Java 😉

2. @MZ4Code Это предложение для KSJaay_? Или я (подразумевая, что есть проблема)? В любом случае, да, KSJaay_ может захотеть ознакомиться с некоторыми руководствами w3schools.com/java/java_encapsulation.asp

3. Да, спасибо вам, ребята, за помощь <3. Твой способ сработал, Гейб, и да, я посмотрю на установщики и геттеры, чтобы получить больше информации об этом.

4. @gabe870 Да, это для KSJaay 🙂

5. @KSJaay_ Потрясающе! Я рад, что смог помочь! Не стесняйтесь пометить мой вопрос как «принятый», если вам больше не нужна помощь в этом!