在ItemListener上使用ItemEvent.getStateChange()和checkbox.getState()之间的区别?

时间:2016-11-05 23:53:03

标签: java itemlistener

所以我是Java的新手,我正在尝试将一个简单的文本编辑器作为我的第一个java程序。所以我目前正致力于文本包装。所以最初我的代码看起来像这样。

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()来自输出SELECTED /的ItemEvent 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);

}

谢谢,

1 个答案:

答案 0 :(得分:0)

所以事实证明我将监听器添加到像kgeorgiy怀疑的错误组件中。 我尝试运行两个代码,并将侦听器添加到wrapMenuItem.addItemListener(new WordWrapListener());

这两个代码现在都在工作,虽然我更喜欢使用后者,因为我不必将wrapMenuItem声明为实例变量。