2013-04-01 150 views
0

我在按鈕中的JButton和JTextArea上有一個動作偵聽器。然而,當我點擊按鈕的文本區域吞噬事件,並沒有發生任何按鈕。JTextArea吞嚥JButton動作偵聽器Java

如何點擊該區域?

謝謝

按鈕代碼

public class CustomFoodItemButton extends JButton{ 


    public JTextArea buttonTitle; 
    /** 
    * Public constructor 
    * @param title 
    */ 
    public CustomFoodItemButton(String title) { 

     //Set button text by using a text area 
     buttonTitle = new JTextArea(); 
     buttonTitle.setText(title); 
     buttonTitle.setFont(new Font("Helvetica Neue", Font.PLAIN, 15)); 

     buttonTitle.setEditable(false); 
     buttonTitle.setWrapStyleWord(true); 
     buttonTitle.setLineWrap(true); 
     buttonTitle.setForeground(Color.white); 
     buttonTitle.setOpaque(false); 


     //Add the text to the center of the button 
     this.setLayout(new BorderLayout()); 
     this.add(buttonTitle,BorderLayout.CENTER); 

     //Set the name to be the title (to track actions easier) 
     this.setName(title); 

     //Clear button so as to show image only 
     this.setOpaque(false); 
     this.setContentAreaFilled(false); 
     this.setBorderPainted(false); 

     //Set not selected 
     this.setSelected(false); 

     //Set image 
     setImage(); 
    } 

GUI類代碼

private void addFoodItemButtons (JPanel panel){ 

     //Iterate over menu items 
     for (FoodItem item : menuItems) { 

      //Create a new button based on the item in the array. Set the title to the food name 
      CustomFoodItemButton button = new CustomFoodItemButton(item.foodName); 

      //Add action listener 
      button.addActionListener(this); 


     } 
    } 
+0

添加了代碼。 –

+0

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

2

編輯對於多JComponents,看看這個答案:https://stackoverflow.com/a/5767825/2221461

在我看來,就好像你是ov錯誤的事情。如果您無法編輯TextArea的文本,爲什麼您在按鈕上使用TextArea?

還有另外一個構造函數Jbutton將:

JButton button = new JButton(item.foodname); 

這將創建一個文本的「item.foodname」值的按鈕。

然後,您可以簡化您的構造函數:

public class CustomFoodItemButton extends JButton { 
    public CustomFoodItemButton(String title) { 
     super(title); 
     setName(title); 
     setOpaque(false); 
     setContentAreaFilled(false); 
     setBorderPainted(false); 
     setSelected(false); 
     setImage(); 
    } 
} 

請讓我知道如果我誤解你的問題。

+0

但是文字不會纏繞多行......它只會在一行上。 HTML不會分割線路,因爲我不知道這條線路多長時間 –

+0

@waf你知道允許有多少條線路嗎? – RaptorDotCpp

+0

不,它從文件中讀取,不管那行是什麼,那是按鈕標題。 –