所以我是新来的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);
}
谢谢
这两个代码段应该具有相同的行为,除非将侦听器添加到错误的组件中。你能提供一个使用'WordWrapListener'的代码片段吗? – kgeorgiy
嗨kgeorgiy,感谢您的回复,我编辑我的帖子以显示使用WordWrapListener的完整片段,所以基本上我将侦听器添加到了JCheckboxMenuItem。 –
所以我试图改变我的代码回到我原来的计划,现在它的工作..所以这两个代码现在正在工作,似乎我添加了听众不同组件像你想象的! –