public class OpenBook extends JFrame{
FileDialog fileDialog = new FileDialog(this, "Select book", FileDialog.LOAD);
String s = "";
public OpenBook() {
fileDialog.show();
if(fileDialog.getFile() == null)
return;
}
public void openBook() throws FileNotFoundException{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
}
});
File myFile = new File(fileDialog.getDirectory(), fileDialog.getFile());
Scanner in = new Scanner(new File(fileDialog.getDirectory()));
while(in.hasNext())
s += in.nextLine() + "\r\n";
in.close();
}
}
public class CreateJFrame
{
public static void createGUI()
{
//Create JFrame
JFrame frame = new JFrame("LIBRARY");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//Create JLabel
JLabel label = new JLabel();
frame.add(label);
label.setVisible(true);
.....
//readMenuItem ActionListener
readMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
try{
OpenBook opBook = new OpenBook();
opBook.openBook();
}
catch(Exception exc){
}
}
});
package application;
import java.awt.FileDialog;
import java.awt.Frame;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
// Тут необязательно наследоваться от JFrame
// Название класса должно отображать его предназаначение
public class BookReader {
// поля должны быть приватными
private FileDialog fileDialog;
private BookReaderCallback callback;
// Вложенный интерфейс обратного вызова
public interface BookReaderCallback {
// метод будет вызван, когда текстовый файл будет успешно прочитан до конца
void onReadComplete(String text);
}
// В конструктор передаем фрейм родителя
// не обязательно его инстанцировать в этом классе
public BookReader(Frame parent) {
fileDialog = new FileDialog(parent, "Select book", FileDialog.LOAD);
}
//А название метода должно отображать его действие или результат действия
public void readBook() {
// show() deprecated поэтому вызываем "setVisible"
fileDialog.setVisible(true);
if (fileDialog.getDirectory() == null || fileDialog.getFile() == null) {
return;
}
Scanner in = null;
String text = "";
try {
in = new Scanner(new File(fileDialog.getDirectory(),
fileDialog.getFile()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (in.hasNext()) {
text += in.nextLine() + "\n";
}
in.close();
// прочитали файл и теперь через обьект класса обраьтного вызова
//нотифицируем вызывающий класс о том что текст прочитан и передаем ему результат
if (callback != null) {
callback.onReadComplete(text);
}
}
//"ceттер" для экземпляра обратного вызова
public void setCallback(BookReaderCallback callback) {
this.callback = callback;
}
}
package application;
import java.awt.Button;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class JFrameCreator {
public static void main(String[] args) {
createGUI();
}
public static void createGUI() {
try {
UIManager.setLookAndFeel((LookAndFeel) Class.forName(UIManager.getCrossPlatformLookAndFeelClassName()).newInstance());
} catch (InstantiationException | IllegalAccessException| ClassNotFoundException | UnsupportedLookAndFeelException e) {
// Игнорируем
}
JPanel content = new JPanel(new FlowLayout());
// вместо Label для текста стоит бы использовать TextArea(Label - для короткого однострочного текста),
JTextArea textArea = new JTextArea();
textArea.setText("Пока пусто...");
Button btnOpenFileDialog = new Button("Browse");
content.add(btnOpenFileDialog);
content.add(textArea);
JFrame frame = new JFrame("LIBRARY");
frame.setContentPane(content);
frame.setPreferredSize(new Dimension(300, 200));
frame.pack();
// центрируем относительно экрана
frame.setLocationRelativeTo(null);
// навешиваем слушатель на кнопку
// это плохой пример, скорее всего нужно навесить KeyListener, но лень имплементировать три метода
btnOpenFileDialog.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// создаем обьект BookReader
BookReader bookReader = new BookReader(frame);
// передаем ему экземпляр BookReaderCallback в виде анонимного класса
bookReader.setCallback(new BookReader.BookReaderCallback() {
// метод будет вызван из класса BookReader как только файл будет прочитан
@Override
public void onReadComplete(String text) {
// меняем текст в Label
textArea.setText(text);
}
});
// запускаем "читалку" :)
bookReader.readBook();
}
});
frame.setVisible(true);
}
}