如何向我的 fillRect 添加长文本?
How can I add a long text to my fillRect?
我正在开发一个将图钉添加到地图的程序,图钉是 class 的子class,它在地图上绘制一个三角形并且可以点击,如果您单击它会展开并显示不同的内容,例如名称、文本或图片。
我有一个工作子class,它可以从三角形中创建一个矩形并显示该地点的名称。为此,我使用了 drawString。但是现在,对于我的第二个子class,它应该在这个地方显示一个描述,并且描述可能很长,为此我不能使用drawString,因为它只显示在一行上,而且它将剪辑我的文字..
我尝试将描述添加到 JTextArea,然后将其添加到 JScrollPane,然后我尝试将滚动窗格添加到矩形区域,但这似乎不起作用,因为 "The method add(JScrollPane) is undefined for the type Graphics"
这是我的超级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,它不起作用..
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 的文档:
If you want to mix fonts or colors within the text, or if you want formatting such as multiple lines, you can use HTML. HTML formatting can be used in all Swing buttons, menu items, labels, tool tips, and tabbed panes, as well as in components such as trees and tables that use labels to render text.
来源: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。
您可以使用相同的 JTextArea 并使用 Graphics 实例对其进行绘制
desc.setSize(width, height); //define size
desc.paintAll(g); //paint
我正在开发一个将图钉添加到地图的程序,图钉是 class 的子class,它在地图上绘制一个三角形并且可以点击,如果您单击它会展开并显示不同的内容,例如名称、文本或图片。
我有一个工作子class,它可以从三角形中创建一个矩形并显示该地点的名称。为此,我使用了 drawString。但是现在,对于我的第二个子class,它应该在这个地方显示一个描述,并且描述可能很长,为此我不能使用drawString,因为它只显示在一行上,而且它将剪辑我的文字..
我尝试将描述添加到 JTextArea,然后将其添加到 JScrollPane,然后我尝试将滚动窗格添加到矩形区域,但这似乎不起作用,因为 "The method add(JScrollPane) is undefined for the type Graphics"
这是我的超级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,它不起作用..
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 的文档:
If you want to mix fonts or colors within the text, or if you want formatting such as multiple lines, you can use HTML. HTML formatting can be used in all Swing buttons, menu items, labels, tool tips, and tabbed panes, as well as in components such as trees and tables that use labels to render text.
来源: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。
您可以使用相同的 JTextArea 并使用 Graphics 实例对其进行绘制
desc.setSize(width, height); //define size
desc.paintAll(g); //paint