我有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
可点击(当发生此事件时,应弹出一个屏幕,我可以在其中更改/删除对象)。
这怎么可能(稍作修改)?
答案 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到JTextAreapublic 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) {}
};
}