Hallo zusammen ich benötige ein wenig hilfe bei der Fehlersuche in diesem kleinen Programm.
Und zwar liegt der der Fehler darin das, wenn eine neue Datei erstellt wird und das 1 mal gespeichert wird speichern unter aufgerufen wird jedoch beim 2 mal speichen. Und hier liegt der Fehler, es wird beim 2 mal wiedermal speichern unter ausgeführt.
Und zwar liegt der der Fehler darin das, wenn eine neue Datei erstellt wird und das 1 mal gespeichert wird speichern unter aufgerufen wird jedoch beim 2 mal speichen. Und hier liegt der Fehler, es wird beim 2 mal wiedermal speichern unter ausgeführt.
Java:
package file;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.PopupMenu;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
public class SwingFrame extends JFrame
implements ActionListener{
JLayeredPane desktop;
JInternalFrame internalFrame;
JEditorPane editorPane;
JTextField jtfStatus;
Container contentPane;
//MenuObject:
JMenuBar menuBar;
JMenu menuFile, menuOpen, menuHelp;
JMenuItem jmiNew, jmiOpenFile, jmiOpenWeb, jmiClose, jmiSave, jmiSaveAs, jmiHelp, jmiAbout;
private Action actNewFile,actOpenFile,actSaveFile,actOpenWeb,actHelp,actAbout;
//Menu Icons
private JToolBar toolBar;
private JButton jbtbNew, jbtbOpenFile, jbtbOpenWeb, jbtbSave, jbtbHelp, jbtbAbout;
private String iconSize="24";
//Tool Tips with Button
private final String TTT_NEW="Erstelle eine neu Datei";
private final String TTT_OPENFILE="Öffne eine Datei aus dem Filesystem des Rechners";
private final String TTT_WEB="Gib den URL einer Datei ein";
private final String TTT_SAVE="Datei am gleichen Ort speichern";
private final String TTT_HELP="hilfe zu diesem Programm";
private final String TTT_INFO="Info zu diesem Programm";
private KeyStroke keyStroke;
private FileBrowser fileBrowser;
private File file;
public SwingFrame() {
super("SwingFrame mit Menu");
setSize(600,450);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane=this.getContentPane();
createMenu();
}
public void createMenu(){
// Menu
menuBar=new JMenuBar();
setJMenuBar(menuBar);
//Data-Menu
menuFile=new JMenu("Datei");
file=null;
actNewFile=new AbstractAction("Neu...",new ImageIcon("images/New"+iconSize+".gif")){
public void actionPerformed(ActionEvent ae){
file=null;
editorPane.setContentType("text/plain");
editorPane.setText("");
jtfStatus.setText("\"Datei - Neu ...\" gewählt.");
}
};
actNewFile.putValue(Action.SHORT_DESCRIPTION, TTT_NEW);
jmiNew=menuFile.add(actNewFile);
menuOpen=new JMenu("Öffnen");
jmiOpenFile=new JMenuItem("Dateisystem...");
actOpenFile=new AbstractAction("Dateisystem...",new ImageIcon("images/Open"+iconSize+".gif")){
public void actionPerformed(ActionEvent ae){
String str= fileBrowser.chooseText("Datei wählen ","usr");
file=fileBrowser.getFile();
editorPane.setContentType("text/plain");
if(str != null){
editorPane.setText(str);
jtfStatus.setText("\"Datei - Öffnen -"+" Dateisystem...\" gewählt");
}else{jtfStatus.setText("Keine Datei ausgewählt!");
}
}
};
//KeyStroke-Object (Shortcut)
keyStroke=KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK);
//Shortcut save in Action-Object
actOpenFile.putValue(Action.ACCELERATOR_KEY,keyStroke);
actOpenFile.putValue(Action.SHORT_DESCRIPTION, TTT_OPENFILE);
jmiOpenFile=menuOpen.add(actOpenFile);
jmiOpenWeb=new JMenuItem("Web...");
actOpenWeb=new AbstractAction("Web...",new ImageIcon("images/WebComponent"+iconSize+".gif")){
public void actionPerformed(ActionEvent ae){
URL url=fileBrowser.chooseURL("HTML - Seite wählen", "usr");
if (url != null) {
try{
editorPane.setPage(url);
file=fileBrowser.getFile();
}catch(IOException ioe){
System.out.println(ioe.toString());
}
jtfStatus.setText("\"Datei - Öffnen - "+" Web...\" gewählt.");
}
}
};
actOpenWeb.putValue(Action.SHORT_DESCRIPTION, TTT_WEB);
jmiOpenWeb=menuOpen.add(actOpenWeb);
menuFile.add(menuOpen);
jmiClose=new JMenuItem("Schließen");
jmiClose.addActionListener(this);
menuFile.add(jmiClose);
//SeparatorLine Menu
menuFile.addSeparator();
actSaveFile=new AbstractAction("Speichern",new ImageIcon("images/Save"+iconSize+".gif")){
public void actionPerformed(ActionEvent ae){
if (file != null){jtfStatus.setText("\"Datei - Speichern\" gewählt.");
save();
System.out.println ("if");
}else {
jtfStatus.setText("Umgeleitet auf : \"Datei - Speichern unter...\"usr");
saveAs();
System.out.println ("else");
}
}
};
actSaveFile.putValue(Action.SHORT_DESCRIPTION, TTT_SAVE);
jmiSave=menuFile.add(actSaveFile);
jmiSaveAs=new JMenuItem("Speichern unter...",new ImageIcon("images/SaveAs"+iconSize+".gif"));
jmiSaveAs.addActionListener(this);
menuFile.add(jmiSaveAs);
menuBar.add(menuFile);
//HelpMenu
menuHelp=new JMenu("?");
actHelp=new AbstractAction("Hilfe",new ImageIcon("images/Help"+iconSize+".gif")){
public void actionPerformed(ActionEvent ae){
showHelp(); // called ShowHelp
jtfStatus.setText("\" ? - Hilfe\" gewählt.");
}
};
actHelp.putValue(Action.SHORT_DESCRIPTION, TTT_HELP);
jmiHelp=menuHelp.add(actHelp);
menuHelp.add(jmiHelp);
menuHelp.addSeparator();
actAbout=new AbstractAction("Info",new ImageIcon("images/About"+iconSize+".gif")){
public void actionPerformed(ActionEvent ae){
jtfStatus.setText("\"? - Info \" gewählt.");
showInfo(); // called ShowInfo
}
};
actAbout.putValue(Action.SHORT_DESCRIPTION, TTT_INFO);
jmiAbout=menuHelp.add(actAbout);
menuHelp.add(jmiAbout);
menuBar.add(menuHelp);
//ToolTips without Button
jmiOpenWeb.setToolTipText("Gib den URL einer Datei ein");
jmiClose.setToolTipText("Schließt die Anwendung ohne weitere Nachfrage");
jmiSaveAs.setToolTipText("Datei zum Speichern auswählen");
// StatusBar
jtfStatus=new JTextField("");
jtfStatus.setBackground(Color.black);
jtfStatus.setForeground(Color.white);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(BorderLayout.SOUTH, jtfStatus);
editorPane=new JEditorPane();
JScrollPane editorSP=new JScrollPane(editorPane);
panel.add(BorderLayout.CENTER, editorSP);
contentPane.add(BorderLayout.CENTER, panel);
//Mnemonic ShortKeys
menuFile.setMnemonic('d');
jmiNew.setMnemonic('N');
menuOpen.setMnemonic('f');
jmiOpenFile.setMnemonic('e');
jmiOpenWeb.setMnemonic('w');
jmiClose.setMnemonic('s');
jmiSave.setMnemonic('p');
jmiSaveAs.setMnemonic('a');
//ToolBar
toolBar=new JToolBar();
jbtbNew=toolBar.add(actNewFile);
jbtbOpenFile = toolBar.add(actOpenFile);
jbtbOpenWeb = toolBar.add(actOpenWeb);
jbtbSave = toolBar.add(actSaveFile);
//ToolBar SeperatorLine
toolBar.addSeparator();
jbtbHelp = toolBar.add(actHelp);
jbtbAbout = toolBar.add(actAbout);
contentPane.add(BorderLayout.NORTH, toolBar);
fileBrowser = new FileBrowser(jtfStatus);
//setVisible
setVisible(true);
}
public void showHelp(){
desktop=getLayeredPane();
JInternalFrame internalFrame = new JInternalFrame("HELP",true,true,false,false);
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");
textPane.setText("<html><center>Dies ist ein <b>Hilfetext</b> zur Swing-Applikation <i>SwingFrame</i></html>");
internalFrame.add(new JScrollPane(textPane));
internalFrame.setSize(400,300);// high-width Window
internalFrame.setLocation(100,80);// position internalFrame
internalFrame.setVisible(true);
desktop.add(internalFrame, new Integer(100));
}
//Method ShowInfo
public void showInfo(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
desktop=getLayeredPane();
JInternalFrame internalFrame= new JInternalFrame("Info",false,true,false,false);
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");
textPane.setText("<html><center><b><h2>SwingFrame-Aplikation</b></h2>" +
"</center><b><center><b>Autor:Marco Greulich</b></center>" +
"<center><b>Version:</b> 05.02.2010</center>" +
"<center><b>Projekt:</b>Lernheft JAV06N</center>" +
"<center><b>Abschnitt:</b>Einsendeaufgaben</center></html>");
internalFrame.add(new JScrollPane(textPane));
internalFrame.setSize(300,200);
internalFrame.setLocation(150, 140);
internalFrame.setVisible(true);
internalFrame.setFocusable(true);
//internalFrame.setResizable(false);
desktop.add(internalFrame, new Integer(300));
}
public static void main(String[] args){
new SwingFrame();
}
public void actionPerformed(ActionEvent ae) {
if(ae.getSource().equals(jmiClose))System.exit(0);
else if(ae.getSource().equals(jmiSaveAs)){
saveAs();
jtfStatus.setText("\"Datei - Speichern unter...\"gewählt");
}
}
private void saveAs() {
fileBrowser.saveFileAs(editorPane.getText(), "Speichern", "usr");
}
private void save(){
fileBrowser.saveFile(file, editorPane.getText());
}
}
Java:
package file;
import java.io.*;
import java.net.URL;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
public class FileBrowser{
private JTextField jtfStatus;
private JFileChooser fileChooser;
private File file;
public File getFile(){return file;}
public FileBrowser(JTextField jtfStatus){
this.jtfStatus=jtfStatus;
}
public URL chooseURL (String title, String startDir){
URL url = null;
fileChooser = new JFileChooser(new File(startDir));
int returnVal = fileChooser.showDialog(null, title);
if(returnVal == JFileChooser.APPROVE_OPTION){
try {
file = fileChooser.getSelectedFile();
url = file.toURL();
}catch (java.net.MalformedURLException murlex){
jtfStatus.setText("MalformedURLException: " + murlex.getMessage());
}
}else if (returnVal == JFileChooser.CANCEL_OPTION){
jtfStatus.setText("Keine Datei ausgewählt");
}
return url;
}
public String chooseText(String title, String startDir){
file = null;
fileChooser = new JFileChooser(new File(startDir));
int returnVal = fileChooser.showDialog(null, title);
if(returnVal == JFileChooser.APPROVE_OPTION){
file = fileChooser.getSelectedFile();
}else if (returnVal == JFileChooser.CANCEL_OPTION){
jtfStatus.setText("Keine Datei ausgewählt");
return null;
}
FileReader reader = null;
try {
reader = new FileReader(file);
}catch (FileNotFoundException fnfe){
System.out.println("FileNotFoundException: " + fnfe
.getMessage());
}
BufferedReader bufReader = new BufferedReader (reader);
String str;
StringBuffer sb = new StringBuffer();
try{
while((str=bufReader.readLine()) != null){
sb.append(str);
//set SeperatorLine
sb.append(System.getProperty("line.seperator"));
}
bufReader.close();
}catch (IOException ioe){
System.out.println("IOException: "+ ioe.getMessage());
}
return sb.toString();
}
public void saveFile(File file, String text){
try{
BufferedWriter bufWriter = new BufferedWriter (new FileWriter (file));
bufWriter.write(text);
bufWriter.flush();
bufWriter.close();
}catch (IOException ioe){
jtfStatus.setText("IOException: " + ioe.getMessage());
}
}
public File saveFileAs(String text, String title, String startDir){
File file;
fileChooser = new JFileChooser(new File(startDir));
fileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
fileChooser.setApproveButtonText(title);
int returnVal = fileChooser.showDialog(jtfStatus, null);
if(returnVal == JFileChooser.APPROVE_OPTION){
file = fileChooser.getSelectedFile();
saveFile(file, text);
jtfStatus.setText("Text in Datei \""+file + "\"gespeichert.");
return file;
}else if(returnVal == JFileChooser.CANCEL_OPTION){
jtfStatus.setText("Speicherdialog abgebrochen");
}
return null;
}
}