我正在开发一个将图钉添加到 map 的程序,图钉是一个类的子类,该类在 map 上绘制一个三角形并且可以点击,如果你点击它会展开并显示不同的东西,比如名字,文字或图片。
我有一个工作子类,它从三角形中创建一个矩形并显示该地点的名称。为此,我使用了 drawString。但是现在,对于我的第二个子类,它应该在这个地方显示一个描述,并且描述可能很长,为此我不能使用 drawString,因为它只显示在一行上,它会剪掉我的文本。 .
我尝试将描述添加到 JTextArea,并将其添加到 JScrollPane,然后我尝试将滚动 Pane 添加到矩形区域,但这似乎不起作用,因为“方法 add(JScrollPane)对于图形类型是未定义的”
这是我的父类(super class):
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
abstract public class Place extends JComponent {
private String name;
private int x,y;
boolean highlighted = false;
boolean hidden = false;
boolean showed = false;
public Place(int x, int y, String name){
setBounds(x,y,30,30);
this.name=name;
this.x=x-15;
this.y=y-30;
Dimension d = new Dimension(30,30);
setPreferredSize(d);
setMaximumSize(d);
setMinimumSize(d);
addMouseListener(new MouseLis());
}
abstract protected void show(Graphics g);
protected void paintComponent(Graphics g){
super.paintComponent(g);
// g.setColor(Color.BLACK);
if(!showed){
setBounds(x,y,30,30);
int[] xes = {0,15,30};
int[] yes = {0,30,0};
g.fillPolygon(xes, yes, 3);
} else {
show(g);
}
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public String getName() {
return name;
}
class MouseLis extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent mev){
showed = ! showed;
repaint();
}
}
}
这是我的子类,它不起作用..
class DescPlace extends Place{
private String Description;
private JTextArea desc = new JTextArea(Description);
public DescPlace(int x, int y, String name, String descr){
super(x,y,name);
this.Description = descr;
}
protected void show(Graphics g){
setBounds(getX(), getY(),150,200);
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 150, 200);
//g.add(new JScrollPane(desc));
}
}
最佳答案
您可以使用相同的 JTextArea 并使用 Graphics 实例绘制它
desc.setSize(width, height); //define size
desc.paintAll(g); //paint
关于java - 如何向我的 fillRect 添加长文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895057/