2016-04-11 10 views
1

オープン、セーブ、および削除のボタンを持つ単純なワードプロセッサを作ろうとしています。これまで私は保存ボタンを手に入れました!一方、開いているボタンはファイルを開きません。ボタンをクリックするたびに何も起こりません。助けてください!ここに私のオープンクラスのコードです:なぜあなたはRTFファイルを開くと、それを解析するためのHTMLEditorKitを使用しているワードプロセッサGUIを使用してファイルを開く

package Word_Processor.src; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.JTextPane; 

public class Display extends JPanel implements ActionListener { 
private JTextPane textArea; 
private JButton saveButton; 
private JComboBox colorCombo; 
private JComboBox fontCombo; 
private JLabel processorLabel; 
private JSlider fontSize; 
private JButton openButton; 
private JButton deleteButton; 

// Create some method objects 
SaveContent saveFile = new SaveContent(); 
ColorManagement colorClass = new ColorManagement(); 
FontManagement fontClass = new FontManagement(); 
Main main = new Main(); 
OpenFile openFile = new OpenFile(); 

// Create some arrays 
String[] colorItems =  { "Red", "Blue", "Green", "Purple", "Orange", "Black" }; 
String[] fontItems = { "Monospaced", "Serif", "Sans Serif", "Arial" }; 

public Display() { 
    init(); 
} 

public void init() { 
    Font font; 
    Color color; 

    color = colorClass.getColor(); 
    font = fontClass.getFont(); 

    // Construct Components 
    textArea = new JTextPane(); 
    saveButton = new JButton("Save"); 
    openButton = new JButton("Open"); 
    deleteButton = new JButton("Delete"); 
    colorCombo = new JComboBox(colorItems); 
    fontCombo = new JComboBox(fontItems); 
    processorLabel = new JLabel("Word Processor"); 
    fontSize = new JSlider(10, 30); 

    // Work with slider 
    fontSize.setOrientation(JSlider.HORIZONTAL); 
    fontSize.setMinorTickSpacing(1); 
    fontSize.setMajorTickSpacing(5); 
    fontSize.setPaintTicks(true); 
    fontSize.setPaintLabels(true); 

    // Make the text area look presentable 
    textArea.setBackground(Color.LIGHT_GRAY); 
    // textArea.setForeground(color); 

    // Adjust size and layout 
    setPreferredSize(new Dimension(817, 473)); 
    setLayout(null); 

    // Add components 
    add(textArea); 
    add(saveButton); 
    add(colorCombo); 
    add(fontCombo); 
    add(processorLabel); 
    add(fontSize); 
    add(deleteButton); 
    add(openButton); 

    // set boundaries 
    textArea.setBounds(10, 30, 650, 450); 
    saveButton.setBounds(670, 395, 140, 35); 
    openButton.setBounds(670, 350, 140, 35); 
    deleteButton.setBounds(670, 305, 140, 35); 
    colorCombo.setBounds(670, 205, 140, 35); 
    fontCombo.setBounds(670, 150, 140, 35); 
    processorLabel.setBounds(670, 20, 140, 35); 
    fontSize.setBounds(670, 95, 140, 49); 

    // add action listeners 
    saveButton.addActionListener(this); 
    colorCombo.addActionListener(this); 
    fontCombo.addActionListener(this); 
    deleteButton.addActionListener(this); 
    openButton.addActionListener(this); 


    } 

    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == saveButton) { 
     saveFile.save(textArea); 
    } 
    if (e.getSource() == openButton) { 
     openFile.open(textArea); 
    } 
    if (e.getSource() == colorCombo) { 
     colorClass.selectColor(colorCombo.getSelectedItem().toString()); 
     textArea.setForeground(colorClass.getColor()); 
    } 
    if (e.getSource() == fontCombo) { 
     fontClass.selectFont(fontCombo.getSelectedItem().toString(), fontSize.getValue()); 
     textArea.setFont(fontClass.getFont()); 
    } 

    } 

    public JTextPane getText() { 
    return textArea; 
} 
} 
+2

問題を解決するために[コードブロックのぶら下げ括弧の検出/修正](http://meta.stackexchange.com/q/251795/155831)を参照してください。 –

+2

@ AndrewThompsonのリンクを読んで元の投稿を修正してください。 –

答えて

3

:また

package Word_Processor.src; 

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 

import javax.swing.JFileChooser; 
import javax.swing.JTextPane; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.StyledDocument; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.rtf.RTFEditorKit; 

public class OpenFile { 

public void open(JTextPane text) { 
    JFileChooser chooser = new JFileChooser(); 
    chooser.setMultiSelectionEnabled(false); 
    FileNameExtensionFilter filter = new FileNameExtensionFilter("RICH TEXT FORMAT", "rtf", "rtf"); 
    chooser.setFileFilter(filter); 

    int option = chooser.showOpenDialog(null); 
    String filePath = chooser.getSelectedFile().getPath(); 

    if (option == JFileChooser.APPROVE_OPTION) { 
     StyledDocument doc = (StyledDocument) text.getDocument(); 
     RTFEditorKit kit = new RTFEditorKit(); 
     BufferedInputStream in; 

     try { 
      in = new BufferedInputStream(new FileInputStream(filePath)); 
      kit.read(in, doc, 1); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) {e.printStackTrace(); 
     } catch (BadLocationException e) {e.printStackTrace(); 
     } 
    } else { 
     System.out.println("Open cancelled!"); 

    } 

} 
} 

、ここでオープンクラスを呼び出して、私のDisplayクラスであります?これは失敗のセットアップです。

あなたが

  1. RTFエディタキットではなく、自分の目的のためにHTMLテキスト、に向けたものを使用する必要があるように私には思われます。
  2. すべてのキャッチブロックを無視しています。少なくとも、例外のスタックトレースを出力します。
+0

とても早く戻ってくれてありがとう。私がHTMLキットを使用した唯一の理由は、それが私の保存クラスがどのように設定されているかであり、私は保存クラスに基づいてオープンクラスを作ったからです。私はこれで非常に新しく、これは本当にグループプロジェクトだと考えられていますが、誰も本当にそれに取り組んでいません。 –

+0

投稿を変更してRTFEditorKitの変更を反映させました。それでもテキストファイルは開きません。 OpenFileクラスで間違っているのか、Displayクラスで間違っているのか分かりません。私はキャッチブロックを無視することについてあなたが何を意味するのか不明です。私はこれに精通していないと申し訳ありません。私はあなたに来る前に今夜何時間もそれを修正する方法を研究してきました。私はreadAllBytesを使って私のためにファイルをオープンしようとしましたが、ファイル・チューザーで動作させる方法を理解できませんでした。再度、あなたの助けに感謝します。 –

+1

@CZink:目を閉じて最高速度で車を運転することに相当する、例外を無視する、空のキャッチブロック、たとえば 'catch(FooException e){}'があります。エラーが発生した原因を知りたいのですか?少なくともstacktraceを出力して、あなたが知るようにしてください:例えば、 'catch(FooException e){e.printStacktrace(); } '。それ以外の場合は、危険なコーディングと愚かなコーディングの両方に挑戦しています。すぐに例外処理をお読みください。あなたの現在のコードがどれほど危険であるかを理解するでしょう。 –

関連する問題