我这里有设计问题。有两个选项听起来可以实现,但我都不喜欢。
我需要在 JPanel 中提供两个功能。
- 画几条线
- 绘制多个字符串
广告
- 接近拉伸(stretch)两次
如果我只需要画线,那么我可以从以下答案中复制过去的解决方案。
Draw a line in a JPanel with button click in Java
public class LinePanel extends JPanel {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
...
但是由于我需要添加第二个功能,我需要做这样的事情
public class LineStringPanel extends JPanel {
这将使 LinePanel 只是无用的中间类。
- 创建两个类 LineDrawer 和 StringDrawer 并将 JPanel 作为参数传递给某个执行绘图的方法。我需要调用的问题是不推荐的。
Graphics g = panel.getGraphics();
您有什么想法和建议?
UPD: JPanel 内部有许多 JLabels 作为子项,代表单位和特征。
线条是单位某些特征之间的关系,字符串是某些操作的通知。
所以我想在子 JLabel 的顶部(前面)显示字符串。
JPanel 也位于 JScrollPane 内部。
最佳答案
如果您需要draw strings ,您可以直接在 paintComponent
方法中执行此操作(假设您不需要任何太花哨的东西,这非常简单):
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
...
g.drawLine(p1.x, p1.y, p2.x, p2.y);
...
g.setColor(Color.black);
g.drawString("My Text", 0, 20);
}
然后您就可以使用垃圾神的解决方案,几乎不需要任何更改。
请记住,坐标是文本的基线 - 因此,如果您使用 0,0
,它将不会显示在屏幕上。
关于java - 设计: extend JPanel twice or pass JPanel as parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13563840/