#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_ Потрясающе! Я рад, что смог помочь! Не стесняйтесь пометить мой вопрос как «принятый», если вам больше не нужна помощь в этом!