如何创建可点击的textcontainer

时间:2014-09-24 18:42:08

标签: java swing

我有16个JTextarea放在我的面板上(在gridlayout中)。我没有使用设计工具netbeans。代码为我生成它们:

  for (int i = 0; i < 16; i++) {
            JTextArea vak = maakVak(gridLayoutPanel); //make new JTextArea and add them to gridlayout.
            tekstvakken.add(vak); //save Jtextarea to ArrayList. 
        }

这是生成新JTextArea并将其添加到GUI的方法。

 public JTextArea maakVak(JPanel p) {
    JTextArea vak = new JTextArea(80, 120);    
    vak.setEditable(false);     
    p.add(vak);
    return vak; //return JTextarea to save in the ArrayList
}

我有一个ArrayList,其中包含我为该软件制作的类中的对象。对象包含多个字符串。我需要将所有字符串从一个对象“打印”到一个JTextArea,我为ArrayList中的前16个对象执行此操作(因此我只有16 JTextArea个)。

这很好用,我的GUI上有16个JTextArea,它们包含正确的字符串。

现在我想为我的软件添加更多功能,我需要以某种方式使这些JTextArea可点击(当发生此事件时,应弹出一个屏幕,我可以在其中更改/删除对象)。

这怎么可能(稍作修改)?

2 个答案:

答案 0 :(得分:1)

JTextArea是一个java.awt.Component,因此它可以访问addMouseListener方法。

textArea.addMouseListener(new MouseListener(MouseEvent e) {

    //implemented methods go here
});

这将创建一个实现MouseListener的匿名内部类,我发现它是最简单的方法。

否则,您可以让您的类实现MouseListener。这完成了同样的事情,你仍然需要覆盖方法,但它会影响整个类,而不是只使用一次的匿名类。

如果将放置在JTextAreas中的字符串不是很长,我建议使用JButton,这样你就可以使用addActionListener方法,而不必覆盖你赢得的其他四种方法。使用。

答案 1 :(得分:0)

在maakVak

中添加一个mouseListener到JTextArea
public JTextArea maakVak(JPanel p) {
    JTextArea vak = new JTextArea(80, 120);    
    vak.setEditable(false);  
    vak.addMouseListener(textAreaMouseListener());
    p.add(vak);
    return vak; //return JTextarea to save in the ArrayList
}

private MouseListener textAreaMouseListener() {

    return new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {
            JTextArea vak = (JTextArea) e.getComponent();
            //display popup to make changes
        }

        @Override
        public void mousePressed(MouseEvent e) {}

        @Override
        public void mouseReleased(MouseEvent e) {}

        @Override
        public void mouseEntered(MouseEvent e) {}

        @Override
        public void mouseExited(MouseEvent e) {}
    };
}