0

我在按钮上有一个 JButton 和一个 JTextArea 上的动作侦听器。但是,当我单击按钮时,文本区域会吞下事件,并且按钮没有任何反应。

如何点击该区域?

谢谢

按钮代码

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);


        }
    }
4

1 回答 1

1

编辑对于多行 JComponents,请查看以下答案:https ://stackoverflow.com/a/5767825/2221461

在我看来,好像你把事情复杂化了。如果您无法编辑 TextArea 的文本,为什么还要在按钮上使用 TextArea?

JButtons 还有另一个构造函数:

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();
    }
}

如果我误解了您的问题,请告诉我。

于 2013-04-01T17:29:50.460 回答