2016-11-05 18 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作为实例变量。

相关问题