如何在第一次运行时在同一帧上打开文本文件?
我做了一个小的记事本演示,我试图在主框架中的相同框架中打开文件,但打开该文件时,它打开在不同的框架中,我希望它打开时运行该程序时打开的第一帧。如何在第一次运行时在同一帧上打开文本文件?
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);
}
}
好吧,让我们从这里开始......
public class DemoMenu extends Frame
{
Frame frm=new Frame();
您延长Frame
但随后创建了另一个参照其他Frame
为好。
而不是使用DemoMenu
,你似乎可以用这个“其他” frm
,而不是...
你还混合重量级和轻量级组件(AWT/Swing的),这是从来没有好下场的。取而代之的
-
Frame
,使用JFrame
-
Menu
,使用JMenu
-
MenuItem
,使用JMenuItem
,它可以让我给你介绍setDefaultCloseOperation
这将允许您定义什么样的行动应该发生当用户尝试通过“x”按钮关闭窗口时...
如果您打开一个流,您有责任关闭它(请参阅您的文件打开方法)。
这应该使你的代码看起来更像...
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);
}
}
+1,但有一些建议作为TODO/BNI 1)在EDT 2上启动GUI)返回首选大小和包。 3)因为这是Swing,所以使用['read(Reader,Object)'](http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#read%28java .io.Reader,%20java.lang.Object%29) - 更安全的文本文件加载方法。 ;)4)将'} catch(Exception exp){}更改为'} catch(Exception exp){exp.printStackTrace();} // 很重要! } @ – 2013-05-06 06:09:36
@AndrewThompson修复了最初的线程,谢谢 – MadProgrammer 2013-05-06 06:12:18
发生这种情况是因为您的类扩展了JFrame并从该JFrame创建了新的JFrame。 删除线框架frm=new Frame();
和使用this
代替frm
1)该代码使用AWT的一个奇怪的混合(例如'Frame')摇摆(例如'JOptionPane')。最好把它全部保持在Swing中。 2)一个空白的空白行总是够用的! 3)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。 4)为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。我在那里看到了20多个菜单项,而我怀疑它只需要1. – 2013-05-06 05:50:06