2016-12-12 8 views
3

В Swing (также AWT), LayoutManager s определяет размер и положение Component с внутри Container без рисунка края и линии ...Как нарисовать ячейки макетов и их края в Swing?

для некоторых образовательных целей, как рисовать эти строки? (Например, перекрывая paintComponents()Container класс и т. д.)

Решение вычисляет все в соответствии с правилами каждого макета для получения координат, но есть ли способ использовать сами макеты для этого?

+0

Я не уверен, я понимаю, требование или вопрос. Но вы можете добавить каждый компонент к контейнеру t границы, прежде чем добавлять его в контейнер. И «bordered» я имею в виду видимую границу, такую ​​как «LineBorder» с непрозрачным цветом. Что касается того, почему сначала добавить их в контейнер, это связано с тем, что некоторые компоненты (например, кнопки) уже имеют границу, которая может сама измениться в зависимости от действий пользователя (например, компонент, имеющий фокус ввода). –

+1

Альтернативная стратегия (подходит только для непрозрачных компонентов) заключается в том, чтобы предоставить родительскому контейнеру отдельный цвет, а макет - дополнением между различными областями компонентов. Я ожидаю, что это будет практично с некоторыми макетами, но не с другими. –

+0

@AndrewThompson tnx для вашего редактирования и вашего комментария. –

ответ

2

Вы можете использовать цикл, если хотите, чтобы все ваши компоненты имели границу. следующий метод нарисует границу для всех Свинга компонентов (JComponent с, на самом деле), которые находятся в контекстной панели JFrame «s:

Container cont = frame.getContentPane(); 

Component[] components = cont.getComponents(); 
List<JComponent> list = new ArrayList<>(); 
for (Component comp : components) { 
    if (comp instanceof JComponent) { 
     list.add((JComponent) comp); 
    } 
} 
for (JComponent jComponent : list) { 
    jComponent.setBorder(BorderFactory.createLineBorder(Color.black,2)); 
} 

Это то, что вы получите (игнорировать строку меню, это от предыдущего вопрос):

output