1

Я делаю небольшой JFrame, в котором я рисую большой треугольник. На всех сторонах треугольника должна быть метка. Я должен сам позиционировать эти ярлыки из-за неправильной формы треугольника (да, также будет треугольник с неправильным углом). (Я указал setResizable (false) на моем JFrame, поэтому нет необходимости в нескольких размерах.)Требуемый нулевой макет, для рисования + меток

Может ли какой-либо способ вручную установить местоположение всех моих меток, с менеджером компоновки?

Program design

+0

Вы хотите, чтобы метки на нерегулярных местах, например. в углах форм? – Jonas

+1

Возможно, лучшей стратегией было бы сделать экземпляры 'JLabel'« BufferedImage », а затем привлечь BI к объекту« Graphics »в любом месте, которое лучше всего подходит. См. [Этот ответ] (http://stackoverflow.com/questions/7774960/swing-html-drawstring/7775713#7775713). –

+0

@ Джонас: да, а также посередине каждой стороны. Он всегда будет треугольником, но не всегда регулярным. – Hidde

ответ

1

Вы говорите, что вы хотите сделать этикетки на нештатных местах, например, по углам и по бокам - с лапами. Тогда я бы рекомендовал использовать drawString(String s, int x, int y) в API Graphics2D. Поэтому поместите метки и нарисуйте затем, когда вы рисуете фигуру.

См. Lesson: Working with Text APIs для более сложных параметров, например, Шрифты и метрики шрифтов.

Если вы хотите указать точное расположение меток, это единственный случай, когда вы не должны использовать диспетчер компоновки.

+0

Метод drawString (...) - хорошая идея. Я буду использовать ваш ответ, спасибо! – Hidde

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); 

Хитрая часть будет если вы хотите как-то согласовать, где ваши метки зависят от текущего рисованного треугольника (или что-то еще в контейнере), но, надеюсь, вы не хотите этого делать.

+0

Я хочу сделать это, это мой вопрос. Я знаю о BorderLayout, но будет еще много неправильных треугольников. – Hidde