1

我正在製作一個小JFrame,在其中繪製一個大三角形。在三角形的所有邊上都必須有一個標籤。我必須自己定位這些標籤,因爲三角形的形狀不規則(是的,也會有一個非直角三角形)。 (我已經在我的JFrame上指定了setResizable(false),所以不需要多個尺寸。)要求的零布局,用於繪製+標籤

有沒有辦法用佈局管理器手動設置我所有標籤的位置?

Program design

+0

您是否想在不規則的地方使用標籤在形狀的角落? – Jonas 2011-12-17 01:05:35

+1

將`JLabel`實例渲染到`BufferedImage`可能是一個更好的策略,然後在任何最適合的位置將BI繪製到`Graphics`對象。有關詳細信息,請參閱[此答案](http://stackoverflow.com/questions/7774960/swing-html-drawstring/7775713#7775713)。 – 2011-12-17 03:19:54

+0

@Jonas:是的,也是在每邊的中間。它總是一個三角形,但並不總是規則的。 – Hidde 2011-12-17 09:51:12

回答

1

你說你想在不規則的地方例如繪製標籤在角落和兩側的dhapes。然後我會建議在Graphics2D API中使用drawString(String s, int x, int y)。所以放置標籤然後繪製圖形。

請參閱Lesson: Working with Text APIs以獲得更高級的選項,例如,字體和字體指標。

當您要指定標籤的確切位置時,是不應使用佈局管理器的唯一情況。

2

如果你想在中間的帆布,然後標籤在任何4個側面,你可以使用一個BorderLayout,像這樣:

JPanel framePanel = new JPanel(new BorderLayout()); 

JPanel triangleCanvas = ... 
framePanel.add(triangleCanvas, BorderLayout.CENTER); 

JPanel northLabels = ... 
framePanel.add(northLabels, BorderLayout.PAGE_START); 

JPanel southLabels = ... 
framePanel.add(southLabels, BorderLayout.PAGE_END); 

JPanel eastLabels = ... 
framePanel.add(eastLabels, BorderLayout.LINE_END); 

JPanel westLabels = ... 
framePanel.add(westLabels, BorderLayout.LINE_START); 

frame.getContentPane().add(framePanel); 

最棘手的部分將是如果你想以某種方式對齊你的標籤取決於當前繪製的三角形(或任何在容器中),但希望你不想這樣做。