Как открыть текстовый файл в том же фрейме, когда он запускается в первый раз?
Я сделал небольшую демонстрацию блокнота, и я пытаюсь открыть файл в том же фрейме в основном фрейме, но при открытии файла он открывается в другом фрейме, я хочу, чтобы он был открыт в первом фрейме, который открывается при запуске программы.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class DemoMenu extends Frame
{
Frame frm=new Frame();
MenuBar bar=new MenuBar();
//frm.setMenuBar(bar);
Menu mf=new Menu("File");
Menu me=new Menu("Edit");
Menu mfo=new Menu("Format");
Menu mv=new Menu("View");
Menu mh=new Menu("Help");
MenuItem mf1=new MenuItem("New"+" "+"Ctrl+N");
MenuItem mf2=new MenuItem("Open..."+" "+"Ctrl+O");
MenuItem mf3=new MenuItem("Save"+" "+"Ctrl+S");
MenuItem mf4=new MenuItem("Save As...");
MenuItem mf5=new MenuItem("Page Setup...");
MenuItem mf6=new MenuItem("Print..."+" "+"Ctrl+P");
MenuItem mf7=new MenuItem("Exit");
MenuItem me1=new MenuItem("Undo"+" "+"Ctrl+Z");
MenuItem me2=new MenuItem("Cut"+" "+"Ctrl+X");
MenuItem me3=new MenuItem("Copy"+" "+"Ctrl+C");
MenuItem me4=new MenuItem("Paste"+" "+"Ctrl+V");
MenuItem me5=new MenuItem("Delete"+" "+"Del" );
MenuItem me6=new MenuItem("Find..."+" "+"Ctrl+F");
MenuItem me7=new MenuItem("Find Next"+" "+"F3");
MenuItem me8=new MenuItem("Replace..."+" "+"Ctrl+H");
MenuItem me9=new MenuItem("Go To"+" "+"Ctrl+G");
MenuItem me10=new MenuItem("Select All"+" "+"Ctrl+A");
MenuItem me11=new MenuItem("Date/Time"+" "+"F5");
MenuItem mfo1=new MenuItem("Word Wrap");
MenuItem mfo2=new MenuItem("Font...");
MenuItem mv1=new MenuItem("Status Bar");
MenuItem mh1=new MenuItem("Help Topics");
MenuItem mh2=new MenuItem("About Notepad");
public static void main(String args[])
{
DemoMenu dm=new DemoMenu();
}
public DemoMenu()
{
super("United- Notepad");
setMenuBar(bar);
bar.add(mf);
bar.add(me);
bar.add(mfo);
bar.add(mv);
bar.add(mh);
mf.add(mf1);
mf.add(mf2);
mf.add(mf3);
mf.add(mf4);
mf.addSeparator();
mf.add(mf5);
mf.add(mf6);
mf.addSeparator();
mf.add(mf7);
mf1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane smd=new JOptionPane();
smd.showMessageDialog(null,"Press Ok to open new page");
}
});
final JTextArea jta=new JTextArea(10,20);
JScrollPane scrl=new JScrollPane(jta);
frm.add(scrl);
mf2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser=new JFileChooser();
int selection=chooser.showOpenDialog(frm);
if(selection==JFileChooser.APPROVE_OPTION)
{
JOptionPane.showMessageDialog(null,"so u want to open the file...");
frm.setSize(520,540);
frm.setVisible(true);
File file = chooser.getSelectedFile();
FileInputStream fis=null;
try
{
fis=new FileInputStream(file);
byte b[]=new byte[fis.available()];
fis.read(b);
String str=new String(b);
jta.setText(str);
}
catch(Exception f)
{
f.printStackTrace();
}
}
}
});
mf3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser=new JFileChooser();
chooser.showSaveDialog(null);
}
});
mf4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser=new JFileChooser();
chooser.showDialog(null,"Save As");
}
});
mf7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane scd=new JOptionPane();
scd.showConfirmDialog(null,"Are you want to exit");
}
});
me.add(me1);
me.addSeparator();
me.add(me2);
me.add(me3);
me.add(me4);
me.add(me5);
me.addSeparator();
me.add(me6);
me.add(me7);
me.add(me8);
me.add(me9);
me.addSeparator();
me.add(me10);
me.add(me11);
me11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Date d1=new Date();
JOptionPane smddate=new JOptionPane();
smddate.showMessageDialog(null,d1);
}
});
mfo.add(mfo1);
mfo.add(mfo2);
mv.add(mv1);
mh.add(mh1);
mh.addSeparator();
mh.add(mh2);
setSize(520,540);
setVisible(true);
}
}
2 ответа
Хорошо, давайте начнем здесь...
public class DemoMenu extends Frame
{
Frame frm=new Frame();
Вы расширяете Frame
но затем вы создаете еще одну ссылку на другой Frame
также.
Вместо того, чтобы использовать DemoMenu
Вы, кажется, используете этот "другой" frm
вместо...
Вы также смешиваете тяжелые и легкие компоненты (AWT/Swing), это никогда не закончится хорошо. Вместо
Frame
использоватьJFrame
Menu
использоватьJMenu
MenuItem
использоватьJMenuItem
Что позволяет мне представить вас setDefaultCloseOperation
который позволит вам определить, какое действие должно происходить, когда пользователь пытается закрыть окно с помощью кнопки "х"...
Если вы открываете поток, вы несете ответственность за его закрытие (см. Способ открытия файла).
Это должно сделать ваш код более похожим на...
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class DemoMenu extends JFrame {
// Frame frm = new Frame();
JMenuBar bar = new JMenuBar();
//frm.setJMenuBar(bar);
JMenu mf = new JMenu("File");
JMenu me = new JMenu("Edit");
JMenu mfo = new JMenu("Format");
JMenu mv = new JMenu("View");
JMenu mh = new JMenu("Help");
JMenuItem mf1 = new JMenuItem("New" + " " + "Ctrl+N");
JMenuItem mf2 = new JMenuItem("Open..." + " " + "Ctrl+O");
JMenuItem mf3 = new JMenuItem("Save" + " " + "Ctrl+S");
JMenuItem mf4 = new JMenuItem("Save As...");
JMenuItem mf5 = new JMenuItem("Page Setup...");
JMenuItem mf6 = new JMenuItem("Print..." + " " + "Ctrl+P");
JMenuItem mf7 = new JMenuItem("Exit");
JMenuItem me1 = new JMenuItem("Undo" + " " + "Ctrl+Z");
JMenuItem me2 = new JMenuItem("Cut" + " " + "Ctrl+X");
JMenuItem me3 = new JMenuItem("Copy" + " " + "Ctrl+C");
JMenuItem me4 = new JMenuItem("Paste" + " " + "Ctrl+V");
JMenuItem me5 = new JMenuItem("Delete" + " " + "Del");
JMenuItem me6 = new JMenuItem("Find..." + " " + "Ctrl+F");
JMenuItem me7 = new JMenuItem("Find Next" + " " + "F3");
JMenuItem me8 = new JMenuItem("Replace..." + " " + "Ctrl+H");
JMenuItem me9 = new JMenuItem("Go To" + " " + "Ctrl+G");
JMenuItem me10 = new JMenuItem("Select All" + " " + "Ctrl+A");
JMenuItem me11 = new JMenuItem("Date/Time" + " " + "F5");
JMenuItem mfo1 = new JMenuItem("Word Wrap");
JMenuItem mfo2 = new JMenuItem("Font...");
JMenuItem mv1 = new JMenuItem("Status Bar");
JMenuItem mh1 = new JMenuItem("Help Topics");
JMenuItem mh2 = new JMenuItem("About Notepad");
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
DemoMenu dm = new DemoMenu();
}
});
}
public DemoMenu() {
super("United- Notepad");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setJMenuBar(bar);
bar.add(mf);
bar.add(me);
bar.add(mfo);
bar.add(mv);
bar.add(mh);
mf.add(mf1);
mf.add(mf2);
mf.add(mf3);
mf.add(mf4);
mf.addSeparator();
mf.add(mf5);
mf.add(mf6);
mf.addSeparator();
mf.add(mf7);
mf1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane smd = new JOptionPane();
smd.showMessageDialog(null, "Press Ok to open new page");
}
});
final JTextArea jta = new JTextArea(10, 20);
JScrollPane scrl = new JScrollPane(jta);
add(scrl);
mf2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
int selection = chooser.showOpenDialog(DemoMenu.this);
if (selection == JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, "so u want to open the file...");
File file = chooser.getSelectedFile();
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
byte b[] = new byte[fis.available()];
fis.read(b);
String str = new String(b);
jta.setText(str);
} catch (Exception f) {
f.printStackTrace();
} finally {
try {
fis.close();
} catch (Exception exp) {
}
}
}
}
});
mf3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.showSaveDialog(null);
}
});
mf4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.showDialog(null, "Save As");
}
});
mf7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane scd = new JOptionPane();
scd.showConfirmDialog(null, "Are you want to exit");
}
});
me.add(me1);
me.addSeparator();
me.add(me2);
me.add(me3);
me.add(me4);
me.add(me5);
me.addSeparator();
me.add(me6);
me.add(me7);
me.add(me8);
me.add(me9);
me.addSeparator();
me.add(me10);
me.add(me11);
me11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Date d1 = new Date();
JOptionPane smddate = new JOptionPane();
smddate.showMessageDialog(null, d1);
}
});
mfo.add(mfo1);
mfo.add(mfo2);
mv.add(mv1);
mh.add(mh1);
mh.addSeparator();
mh.add(mh2);
setSize(520, 540);
setVisible(true);
}
}
Это происходит потому, что ваш класс расширяет JFrame и из этого JFrame вы создаете новый JFrame. Удалить строку Frame frm=new Frame();
и использовать this
вместо frm