我正在尝试创建一个可以添加到我的窗格的对象。 该对象包含一个Shape和一些文本。
通过调用:
pane#getChildren()#add(new TextEllipse(...))
它会在引用窗格的中心添加一个带有文本的椭圆。
我对这样一个对象的类如下所示:
public class TextEllipse extends ShapeEllipse {
public TextEllipse(final String text, final double x, final double y) {
super(text, x, y);
}
@Override
protected Shape createShape() {
final double PADDING = 10;
final Ellipse ellipse = new Ellipse();
ellipse.setRadiusX(getText().getLayoutBounds().getWidth() / 2 + PADDING);
ellipse.setRadiusY(10);
ellipse.setStroke(Color.BLACK);
ellipse.setFill(Color.WHITE);
return ellipse;
}
}
public abstract class TextShape extends Pane {
private final Text text;
private final Shape shape;
public TextShape(final String text, final double x, final double y) {
this.text = new Text(x, y, text);
shape = createShape();
}
protected abstract Shape createShape();
public Text getText() {
return text;
}
public Shape getBackgroundShape() {
return shape;
}
}
我跟着d.j.布朗的方法 - 然而,当我调用
时pane#getChildren()#add(new TextEllipse(...))
画布上没有任何内容。
然而,当我这样做时:
pane#getChildren()#add(new TextEllipse(...)#getBackgroundShape())
椭圆确实显示出来。
如果我只添加TextEllipse对象,为什么不显示椭圆和文本?
答案 0 :(得分:1)
实现此目的的一种简单方法是使用robin-singh-from-usa.
。
例如(并且为了使其易于重复使用),您可以定义一个扩展StackPane
的抽象TextShape
类
StackPane
然后实施具体的public abstract class TextShape extends StackPane {
private final Text text;
private final Shape shape;
public TextShape(final String t) {
text = new Text(t);
shape = createShape();
getChildren().addAll(shape, text);
}
abstract protected Shape createShape();
public Text getText() {
return text;
}
public Shape getBackgroundShape() {
return shape;
}
}
,例如TextShape
通过覆盖工厂方法:
TextEllipse
使用示例:
public class TextEllipse extends TextShape {
public TextEllipse(final String t) {
super(t);
}
@Override
protected Shape createShape() {
final double PADDING = 10;
Ellipse ellipse = new Ellipse();
ellipse.setRadiusX(getText().getLayoutBounds().getWidth() / 2 + PADDING);
ellipse.setRadiusY(getText().getLayoutBounds().getHeight() / 2 + PADDING);
ellipse.setStroke(Color.BLACK);
ellipse.setFill(Color.WHITE);
return ellipse;
}
}
答案 1 :(得分:1)
这有效
public class TextEllipse extends StackPane{
private final Ellipse bubble;
private final Text text;
TextEllipse(String text, double x, double y)
{
this.text = new Text(x, y, text);
System.out.println(this.text.getBoundsInLocal().getWidth());
bubble = new Ellipse (x, y, this.text.getBoundsInLocal().getWidth() + 5, 15);
bubble.setFill(Color.YELLOW);
getChildren().addAll(bubble, this.text);
}
}