如何向我的填充矩形添加长文本



我正在开发一个向地图添加图钉的程序,图钉是在地图上绘制三角形并且可以单击的类的子类,如果您单击它,它将展开并显示不同的东西,如名称、文本或图片。

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

我尝试将描述添加到

JTextArea,并将该描述添加到 JScrollPane,然后我尝试将滚动窗格添加到矩形区域,但这似乎不起作用,因为"方法 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));

}
}

您可以使用相同的 JTextArea 并使用图形实例对其进行绘制

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

您可以使用 JLabel 来执行此操作,使用它来显示 HTML 格式的内容。

来自甲骨文的文档:

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

来源: https://docs.oracle.com/javase/tutorial/uiswing/components/html.html

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

new JLabel("<html><p>This will</p><br /><p>appear over multiple</p><br /><p>lines</p></html>")

这同样适用于JToolTip,如果你沿着这条路走下去。

相关内容

  • 没有找到相关文章