2014-10-10 38 views
0

我正在學習使用Java Swing類的事件處理。 我嘗試了基於新波士頓主頁的教程的不同組合。我已經做了一個定義面板,JButtons,JTextfields和Jlabels的類。我創建了一個名爲「處理程序」的類,其中包含ActionPerfomed方法,並且我已將兩個文本字段(item1和item2)連接到addActionlistener方法。 當我運行我的程序,我得到的程序做我想用兩個文本框(這是什麼促使一個JOptionPane.showMessageDialog框中顯示我想要的文字。在Java中學習事件處理

問題是當我想要的JOptionPane.showMessageDialog窗口當我按下其中一個按鈕時顯示某個文本: - 代替顯示下面的文本「您按下了按鈕編號1!」,因爲我希望我的代碼可以執行,而不是顯示一個空的JOptionPane.showMessageDialog-窗口。

我記得經驗豐富的Java程序員會很容易地看到我的代碼有什麼問題

這裏是par代碼必須是錯誤的T:

private class thehandler implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event) 
    { 
     String text =""; 
     if(event.getSource() == item1) 
      text = String.format("You wrote %s in field 1!", event.getActionCommand()); 
     else if (event.getSource() == item2) 
      text = String.format("You wrote %s in field 2!", event.getActionCommand()); 
     else if (event.getSource() == button1) 
      text = "You pushed button number 1!"; 
     else if (event.getSource() == button2) 
      text = "You pushed button number 2!"; 

     JOptionPane.showMessageDialog(null, text); 
+0

彈出的對話框顯示觸發了「ActionListener」。由於它顯示的是空字符串,事件的來源很可能不是您所期望的。 – Robin 2014-10-10 19:22:06

+0

考慮發佈[MCVE](http://stackoverflow.com/help/mcve)。你確定item1,item2,button1和button2被正確初始化了嗎? – 2014-10-10 20:37:49

回答

-1

您的JOptionPane調用之前添加System.out.println()

System.out.println("text=" + text); 
JOptionPane.showMessageDialog(null, text); 

我敢打賭,你會發現,text是一個空字符串。爲什麼?也許你的對象引用是空的。

另一種方法,它可以解決你的問題,不依賴於對象引用,就是用行動命令:

button1.setActionCommand("doAction1"); 

public void actionPerformed(ActionEvent event) { 
    String actionCommand = event.getActionCommand(); 

    if (actionCommand.equals("doAction1")) { 
     // button 1 pressed 
    } 
} 
0
package EventHandling; 

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

public class EventHandling 
{ 
    JLabel jlab; 
    public EventHandling() 
    { 

     JFrame jfrm = new JFrame("Event Handling"); 
     jfrm.setSize(220,90); 
     jfrm.setLayout(new FlowLayout()); 
     jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JButton alpha = new JButton("Alpha"); 
     JButton beta= new JButton("Beta"); 
     alpha.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       jlab.setText("Alpha was pressed."); 
      } 
     } 
     ); 

     beta.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       jlab.setText("Beta was pressed."); 
      } 
     } 
     ); 
     jfrm.add(alpha); 
     jfrm.add(beta); 
     jlab = new JLabel("Press a button"); 
     jfrm.add(jlab); 
     jfrm.setVisible(true); 
    } 

     public static void main(String[]args) 
     { 
      SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        new EventHandling(); 
       } 
      } 
      ); 
     } 


} 

這項計劃將在JLabel的打印已按下了哪個按鈕。

+0

請考慮添加一些你已經完成的工作和原因的解釋。 – QBrute 2017-06-23 08:21:51