Java 如何向fillRect添加长文本?

Java 如何向fillRect添加长文本?,java,swing,graphics,jtextarea,Java,Swing,Graphics,Jtextarea,我正在开发一个程序,在地图上添加图钉,图钉是一个类的子类,这个类在地图上画一个三角形,可以点击,如果你点击它,它将展开并显示不同的东西,比如名称、文本或图片 我有一个正在工作的子类,它从三角形中创建一个矩形,并显示该位置的名称。为此,我使用了抽绳。但是现在,对于我的第二个子类,它将显示对位置的描述,描述可能相当长,因此我不能使用抽绳,因为它只显示在一行上,它将剪辑我的文本 我尝试将描述添加到JTextArea,并将该描述添加到JScrollPane,然后尝试将scrollpane添加到rect区

我正在开发一个程序,在地图上添加图钉,图钉是一个类的子类,这个类在地图上画一个三角形,可以点击,如果你点击它,它将展开并显示不同的东西,比如名称、文本或图片

我有一个正在工作的子类,它从三角形中创建一个矩形,并显示该位置的名称。为此,我使用了抽绳。但是现在,对于我的第二个子类,它将显示对位置的描述,描述可能相当长,因此我不能使用抽绳,因为它只显示在一行上,它将剪辑我的文本

我尝试将描述添加到JTextArea,并将该描述添加到JScrollPane,然后尝试将scrollpane添加到rect区域,但这似乎不起作用,因为“类型图形的方法add(JScrollPane)未定义”

这是我的超级课堂:

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


}
}

您可以使用JLabel来实现这一点,使用它来显示HTML格式的内容

从Oracle的文档中:

如果要在文本中混合字体或颜色,或者要设置格式(如多行),可以使用HTML。HTML格式可用于所有Swing按钮、菜单项、标签、工具提示和选项卡式窗格,以及使用标签呈现文本的树和表格等组件

资料来源:

编辑 没有时间写一千个字,所以这里有一个例子:

new JLabel("<html><p>This will</p><br /><p>appear over multiple</p><br /><p>lines</p></html>")
newjlabel(这将出现在多行上)

这同样适用于JToolTip,如果您使用它。

您可以使用JLabel来实现这一点,使用它来显示HTML格式的内容

从Oracle的文档中:

如果要在文本中混合字体或颜色,或者要设置格式(如多行),可以使用HTML。HTML格式可用于所有Swing按钮、菜单项、标签、工具提示和选项卡式窗格,以及使用标签呈现文本的树和表格等组件

资料来源:

编辑 没有时间写一千个字,所以这里有一个例子:

new JLabel("<html><p>This will</p><br /><p>appear over multiple</p><br /><p>lines</p></html>")
newjlabel(这将出现在多行上)

这同样适用于JToolTip,如果你走这条路。

你可以使用相同的JTextArea,只需使用图形实例来绘制它

desc.setSize(width, height); //define size
desc.paintAll(g); //paint

您可以使用相同的JTextArea,只需使用图形实例绘制它

desc.setSize(width, height); //define size
desc.paintAll(g); //paint

看起来你真正想要答案的问题是如何显示某种悬停弹出窗口。是这样吗?(考虑)创建一个显示你想要做的事情。看起来你真正想要回答的问题是如何显示某种悬停弹出窗口。是这样吗?(请考虑创建一个显示你正在尝试做什么的例子。一个例子值一千个单词。”马库斯马哈尔伯格承认并更新。谢谢推送。谢谢编辑!不要继续回答问题<代码>;)一个例子胜过千言万语。@MarkusWMahlberg承认并更新了这一点。谢谢推送。谢谢编辑!不要继续回答问题<代码>;)工作了,谢谢:)但我把颜色设为黄色,它把它漆成白色了USE desc.setForeground()/setBackground()工作正常,谢谢:)但我将颜色设置为黄色,它会将其绘制为白色?:use desc.set前台()/setBackground()