2014-02-27 119 views
0

你好,我創建簡單的Java編輯器簡單的Java編輯器GUI

我創建菜單的GUI代碼,但我需要匹配 文件:新建:創建一個新的文件。詢問文件的名稱(以及公共類)以及它將被存儲的目錄。將創建的文件插入公共類的結構中,例如公共類MyClass {}。

打開:打開源代碼爲java(.java)的文件。 保存:將當前片段保存在創建期間建立的同一個文件中。 另存爲:顯示您請求文件名稱的對話框以及存儲文件的目錄格式。格式將是java文件(.java)。該窗口的主要部分將使用戶使用編輯器來編輯文件源Java。

窗口的主要部分將有編輯器供用戶用來編輯文件源Java。這將一個片段的處理過程中被更新的信息:數字線的數目在Java源代碼

格式化文本保留字


每個文件都將打開格式化並在下面的規則來處理時將格式化:該java的保留字將以藍色顯示。 的意見會顯示在綠色 字符串文字橙色 所有其他與黑色 的字體將成爲快遞字體大小12磅

我會提供GUI代碼有人能幫助我與上面?

問候 安東尼

// ClassEEFrame 

package editor.gui; 

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.HeadlessException; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JComponent; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 
import javax.swing.JTextPane; 
import javax.swing.border.TitledBorder; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.Style; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.StyleContext; 
import javax.tools.JavaCompiler; 
import javax.tools.ToolProvider; 

public class EEFrame extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -1709009137090877913L; 
    private GridBagLayout layout; 
    private GridBagConstraints constraints; 
    private EEMenuBar menuBar; 
    private EETextPane editor; 
    private EEConsole console; 
    private EEStatusBar statusBar; 
    private File file; 

    public EEFrame() throws HeadlessException { 
     super("Elearn Editor"); 

     JScrollPane scrollPane; 

     layout = new GridBagLayout(); 
     setLayout(layout); 

     constraints = new GridBagConstraints(); 

     menuBar = new EEMenuBar(); 
     setJMenuBar(menuBar); 

     editor = new EETextPane(); 

     scrollPane = new JScrollPane(editor); 
     scrollPane.setBorder(new TitledBorder("Editor")); 

     setConstraints(1, 100, GridBagConstraints.BOTH); 
     addComponent(scrollPane, 0, 0, 1, 1); 

     console = new EEConsole(); 

     scrollPane = new JScrollPane(console); 
     scrollPane.setBorder(new TitledBorder("Console")); 

     setConstraints(1, 40, GridBagConstraints.BOTH); 
     addComponent(scrollPane, 1 ,0 ,1, 1); 

     statusBar = new EEStatusBar(); 
     setConstraints(1, 0, GridBagConstraints.BOTH); 
     addComponent(statusBar, 2, 0, 1, 1); 

     file = null; 
    } 

    public JTextPane getTextPane() { 
     return this.editor; 
    } 

    public void setLines(int lines) { 
     this.statusBar.setLines(lines); 
    } 

    public void setWords(int words) { 
     this.statusBar.setJavaWords(words); 
    } 

    private void setConstraints(int weightx, int weighty, int fill) { 
     constraints.weightx = weightx; 
     constraints.weighty = weighty; 
     constraints.fill = fill; 
    } 

    private void addComponent(Component component, int row, int column, int width, int height) { 
     constraints.gridx = column; 
     constraints.gridy = row; 
     constraints.gridwidth = width; 
     constraints.gridheight = height; 
     layout.setConstraints(component, constraints); 
     add(component); 
    } 

    private class EEMenuBar extends JMenuBar { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = -2176624051362992835L; 
     private JMenu fileMenu, compilationMenu; 
     private JMenuItem newItem, openItem, saveItem, saveAsItem, exportItem, compileProcessItem, compileClassItem; 

     public EEMenuBar() { 
      super(); 

      fileMenu = new JMenu("File"); 

      newItem = new JMenuItem("New"); 

      newItem.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        /* TODO Dispay dialog with inputs class name and file path */ 
       } 

      }); 

      fileMenu.add(newItem); 

      openItem = new JMenuItem("Open"); 

      openItem.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        /*TODO Open existing java source file*/ 

       } 

      }); 

      fileMenu.add(openItem); 

      saveItem = new JMenuItem("Save"); 
      saveItem.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        /*TODO save changes to file*/          
       } 

      }); 

      fileMenu.add(saveItem); 

      saveAsItem = new JMenuItem("Save As"); 

      saveAsItem.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        /*TODO Save as new java source file*/ 
       }    
      }); 

      fileMenu.add(saveAsItem); 

      exportItem = new JMenuItem("Export to pdf"); 

      exportItem.addActionListener(new ActionListener(){ 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        // TODO save as pdf(formatted) 

       } 
      }); 

      fileMenu.add(exportItem);   

      add(fileMenu); 

      compilationMenu = new JMenu("Compilation"); 

      compileProcessItem = new JMenuItem("Compile with system jdk"); 

      compileProcessItem.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        /*TODO Compile java source code and show results in teminal(inside editor)*/ 
       } 

      }); 

      compilationMenu.add(compileProcessItem); 

      compileClassItem = new JMenuItem("Compile with JavaCompiler Class"); 

      compileClassItem.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        /*TODO Call system compiler for file*/ 
       } 
      }); 

      compilationMenu.add(compileClassItem); 

      add(compilationMenu); 

     } 
    } 

    private class EETextPane extends JTextPane { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = -7437561302249475096L; 

     public EETextPane() { 
      super(); 

      //add styles to document 
      Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); 
      StyleConstants.setForeground(def, Color.BLACK); 
      StyleConstants.setFontFamily(def, "Courier"); 
      StyleConstants.setFontSize(def, 12); 

      Style keyword = addStyle("keyword", def); 
      StyleConstants.setForeground(keyword, Color.BLUE); 

      Style literal = addStyle("literal", def); 
      StyleConstants.setForeground(literal, Color.ORANGE); 

      Style comment = addStyle("comment", def); 
      StyleConstants.setForeground(comment, Color.GREEN); 
     } 
    } 

    private class EEConsole extends JTextPane { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = -5968199559991291905L; 

     public EEConsole() { 
      super(); 

      //add styles to document 
      Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); 
      StyleConstants.setForeground(def, Color.BLACK); 
      StyleConstants.setFontFamily(def, "Courier"); 
      StyleConstants.setFontSize(def, 12); 

      Style keyword = addStyle("error", def); 
      StyleConstants.setForeground(keyword, Color.RED); 

      Style literal = addStyle("success", def); 
      StyleConstants.setForeground(literal, Color.GREEN); 
     } 

    } 

    private class EEStatusBar extends JPanel { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 185007911993347696L; 
     private BoxLayout layout; 
     private JLabel linesLabel, lines, wordsLabel, words; 

     public EEStatusBar() { 
      super(); 

      layout = new BoxLayout(this, BoxLayout.X_AXIS); 
      setLayout(layout); 

      linesLabel = new JLabel("Lines : "); 
      linesLabel.setAlignmentX(LEFT_ALIGNMENT); 
      add(linesLabel); 

      lines = new JLabel(""); 
      lines.setAlignmentX(LEFT_ALIGNMENT); 
      add(lines); 

      add(Box.createRigidArea(new Dimension(10,10))); 

      wordsLabel = new JLabel("Java Words : "); 
      wordsLabel.setAlignmentX(LEFT_ALIGNMENT); 
      add(wordsLabel); 

      words = new JLabel(""); 
      words.setAlignmentX(LEFT_ALIGNMENT); 
      add(words); 
     } 

     public void setLines(int lines) { 
      /*TODO set line numbers */ 
     } 

     public void setJavaWords(int words) { 
      /*TODO set java keyword numbers*/ 
     } 
    } 

}


//class Main 

package editor.app; 

import javax.swing.JFrame; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

import elearning.editor.gui.EEFrame; 
import elearning.editor.util.EECodeFormater; 
import elearning.editor.util.EEJavaWordCounter; 
import elearning.editor.util.EELineCounter; 

public class EEditor { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     try { 
      // Set cross-platform Java L&F (also called "Metal") 
      //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 

      //Set Motif L&F 
      //UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 

      //Set Nimbus L&F 
      //UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 

      //Set System L&F 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

      //Set GTK L&F --> Same as System L&F on Linux and Solaris\ 
      //UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); 

      //Set Windows L&F --> Same as System L&F on Windows 
      //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
     } 
     catch (UnsupportedLookAndFeelException e) { 
      // handle exception 
     } 
     catch (ClassNotFoundException e) { 
      // handle exception 
     } 
     catch (InstantiationException e) { 
      // handle exception 
     } 
     catch (IllegalAccessException e) { 
      // handle exception 
     } 

     EEFrame frame = new EEFrame(); 

     frame.setSize(500, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 


     /* TODO Instatiate Threads */ 


     /*TODO Start Threads */ 

    } 

} 

此外,我提供它的一個樣機:

Mockup

+2

請嘗試縮小你的問題,這樣你可能有更高的機會得到答案。 –

+1

你應該儘量減少完整的問題,刪除噪音..以獲得快速的答案,可能是一個很好的答案! – nachokk

+0

問題是什麼?你有什麼問題? – MadProgrammer

回答

0

首先你應該看看File課程。它爲您提供創建,打開,修改和保存文件的方法。要閱讀文件,你也可以給BufferedReader或任何其他讀者一個鏡頭。

  • 創建一個文件:File有方法createNewFile(),結合使用它exists()
  • 要打開並閱讀文件,請使用試用資源(在Java手冊中實際上有一個很好的tutorial)。
  • 要保存文件,你應該檢查出FileWriter,它可以寫入字符串或將它們追加到文件。
  • 對於您的編輯器,您可能需要將前面提到的BufferedReader替換爲LineReader,它還提供了獲取行號的方法。除此之外,你必須弄清楚如何爲線條編號。 (其實這只是google搜索,會有一些想法,如this one - 我沒有詳細檢查,但它可能會有所幫助)。
  • 當然,對於編輯器來說,您應該先將文件讀入字符串,然後使用格式化程序,然後在需要時將其呈現並重新格式化。

除了這些提示,我不能提供更詳細的答案,因爲你也可以閱讀評論,如果你會提供更詳細的問題,它會更容易。你現在只給了我們一個與你的實際問題幾乎沒有任何關係的GUI。
向我們展示您的一些(有問題的)工作,我們可以幫助您,但除此之外,我們不能做的只是給您提供一些提示,就像我剛纔所做的那樣。因此,儘量考慮你的問題,嘗試如何尋求更準確的答案,並打開一些新的問題,如果你想。
但不要忘了查看網站的答案,對於我來說,幾乎我想問的所有問題都已經以類似的方式提出。

0

您好再讓拆分工作納入步驟,

首先,我想創造新的,打開,保存,另存爲,導出爲PDF菜單和事件

下面

是我使用的代碼, GUI框架以新的方式正確打開,打開,保存,另存爲,導出到pdf標籤中,但因爲操作沒有發生。

有人可以寫信給我正確的代碼嗎?請記住我非常java初學者。

public EEMenuBar() { 
     super(); 

     fileMenu = new JMenu("File"); 
     //Create the New menu item 
     newItem = new JMenuItem("New"); 
     newItem.setMnemonic(KeyEvent.VK_N); 
     newItem.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 

      } 

     }); 

     fileMenu.add(newItem); 

     openItem = new JMenuItem("Open"); 
     openItem.setMnemonic(KeyEvent.VK_0); 
     openItem.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       /*TODO Open existing java source file*/ 

      } 

     }); 

     fileMenu.add(openItem); 

     saveItem = new JMenuItem("Save"); 
     saveItem.setMnemonic(KeyEvent.VK_S); 
     saveItem.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       /*TODO save changes to file*/          
      } 

     }); 

     fileMenu.add(saveItem); 

     saveAsItem = new JMenuItem("Save As"); 
     saveAsItem.setMnemonic(KeyEvent.VK_A); 
     saveAsItem.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       /*TODO Save as new java source file*/ 
      }    
     }); 

     fileMenu.add(saveAsItem); 

     exportItem = new JMenuItem("Export to pdf"); 
     exportItem.setMnemonic(KeyEvent.VK_E); 
     exportItem.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       // TODO save as pdf(formatted) 

      } 
     }); 

     fileMenu.add(exportItem);   
+0

有幫助嗎?請!! – user3362685