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