2016-11-05 46 views
0

所以我是新來的Java和我想做一個簡單的文本編輯器作爲我的第一個Java程序。所以我目前正在進行文字換行。所以最初我的代碼看起來像這樣。在ItemListener上使用ItemEvent.getStateChange()和checkbox.getState()時的區別?

public class WordWrapListener implements ItemListener { 
    public void itemStateChanged (ItemEvent e) { 
     if(wrapMenuItem.getState() == true) { // I changed this line of code 
      editorTextArea.setLineWrap(true); 
      editorTextArea.setWrapStyleWord(true); 
      frame.repaint(); 
     } else { 
      editorTextArea.setLineWrap(false); 
      editorTextArea.setWrapStyleWord(false); 
      frame.repaint(); 
     } 

現在上面的代碼不起作用。所以我用Google搜索如何使一個ItemsListener,發現下面的答案:

public class WordWrapListener implements ItemListener { 
    public void itemStateChanged (ItemEvent e) { 
     if(e.getStateChange() == ItemEvent.SELECTED) { // I changed this line 
      editorTextArea.setLineWrap(true); 
      editorTextArea.setWrapStyleWord(true); 
      frame.repaint(); 
     } else { 
      editorTextArea.setLineWrap(false); 
      editorTextArea.setWrapStyleWord(false); 
      frame.repaint(); 
     } 
    } 
} // end inner class 

我有點困惑,爲什麼我的原始代碼不起作用?我只是想根據我的理解得到更好的理解,基於我的理解,這兩者幾乎是相同的唯一的區別是,getState()方法從複選框輸出true/false和getStateChange()是從ItemEvent輸出SELECTED/DESELECTED?

如果這樣做有辦法讓我的第一代碼工作?像使用getState()== true?

編輯:

這裏是一個使用監聽器的代碼片斷。所以我宣佈我的JTextArea是一個實例變量。

private void go() { 
    // make frame 
    JFrame frame = new JFrame("DVTextEditor"); 

    //make menu bar and menu 
    JMenuBar menuBar = new JMenuBar(); 
    JMenu fileMenu = new JMenu("File"); 
    JMenu formatMenu = new JMenu("Format"); 

    //make menu items for file menu 
    JMenuItem newMenuItem = new JMenuItem("New"); 
    JMenuItem openMenuItem = new JMenuItem("Open"); 
    JMenuItem saveMenuItem = new JMenuItem("Save"); 

    //add menu items in file menu 
    fileMenu.add(newMenuItem); 
    fileMenu.add(openMenuItem); 
    fileMenu.add(saveMenuItem); 

    //action listeners for New and Save menu items 
    newMenuItem.addActionListener(new NewMenuListener()); 
    openMenuItem.addActionListener(new OpenMenuListener()); 
    saveMenuItem.addActionListener(new SaveMenuListener()); 

    //make menu items for format menu 
    JCheckBoxMenuItem wrapMenuItem = new JCheckBoxMenuItem("Word Wrap "); 

    //add menu items in format menu 
    formatMenu.add(wrapMenuItem); 

    //action listener for word Wrap item menu 
    wrapMenuItem.addItemListener(new WordWrapListener()); // <------------------------------ 

    // add menu in menu bar 
    menuBar.add(fileMenu); 
    menuBar.add(formatMenu); 

    // meke text area and put inside scrollpane 
    editorTextArea = new JTextArea(15, 50); 
    JScrollPane eScrollBar = new JScrollPane(editorTextArea); 
    eScrollBar.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    eScrollBar.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 

    // add menu bar and text area in frame 
    frame.setJMenuBar(menuBar); 
    frame.getContentPane().add(BorderLayout.CENTER, eScrollBar); 

    // enable frame 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(800, 600); 
    frame.setVisible(true); 

} 

謝謝

+0

這兩個代碼段應該具有相同的行爲,除非將偵聽器添加到錯誤的組件中。你能提供一個使用'WordWrapListener'的代碼片段嗎? – kgeorgiy

+0

嗨kgeorgiy,感謝您的回覆,我編輯我的帖子以顯示使用WordWrapListener的完整片段,所以基本上我將偵聽器添加到了JCheckboxMenuItem。 –

+0

所以我試圖改變我的代碼回到我原來的計劃,現在它的工作..所以這兩個代碼現在正在工作,似乎我添加了聽衆不同組件像你想象的! –

回答

0

所以原來我添加偵聽像kgeorgiy懷疑是錯誤的組件。 我試着運行這兩個代碼與監聽添加到wrapMenuItem.addItemListener(新的WordWrapListener());

這兩個代碼現在正在工作,但我更喜歡使用後者,因爲使用這一個我不必聲明wrapMenuItem作爲實例變量。

相關問題