所以我是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);
}
谢谢,
答案 0 :(得分:0)
所以事实证明我将监听器添加到像kgeorgiy怀疑的错误组件中。 我尝试运行两个代码,并将侦听器添加到wrapMenuItem.addItemListener(new WordWrapListener());
这两个代码现在都在工作,虽然我更喜欢使用后者,因为我不必将wrapMenuItem声明为实例变量。