Создание серого пространства вокруг JPanel в Java - PullRequest
2 голосов
/ 09 сентября 2010

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

Пример: alt text

Ответы [ 5 ]

2 голосов
/ 09 сентября 2010

Рассматривали ли вы вопрос об использовании границы линии внутри JPanel.

2 голосов
/ 09 сентября 2010

Как использовать границы . Создайте панель с EmptyBorder, а затем добавьте в нее второй JPanel.

Не смешивайте компоненты AWT в приложении Swing. Холст является компонентом AWT. Просто используйте JPanel, у вас все еще есть доступ ко всем методам Graphics.

Edit:

Перестань называть свою JPanel Холстом. Canvas - это компонент AWT, и он работает не так, как JPanel.

Если вы не хотите, чтобы размер JPanel изменялся, задайте ему предпочтительный размер и добавьте его в JPanel, используя FlowLayout. Вы можете контролировать горизонтальные / вертикальные промежутки FlowLayout, чтобы создать вид границы.

Опубликуйте свой SSCCE (http://sscce.org) с указанием того, что вы пробовали и с какими проблемами вы столкнулись, а не с тем, чтобы мы выкладывали весь код и угадывали, в чем ваши проблемы.

1 голос
/ 09 сентября 2010

Есть несколько способов сделать это.Самое простое, что приходит мне в голову, - это создать JPanel, а затем поместить Canvas в JPanel.Установите вставки в Canvas в соответствии с размером вашего серого пространства.Установите фон JPanel на Серый.Как то так:

Canvas canvas = new Canvas();
JPanel panel = new JPanel();
panel.setBackground(Color.GRAY);
GridBagLayout layout = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
gc.fill = BOTH;
gc.weightx = 1.0;
gc.weighty = 1.0;
gc.insets = new Insets(30, 30, 30, 30);  // Your gray space
layout.setConstraints(canvas, gc);
panel.add(canvas);

panel.setLayout(layout);
1 голос
/ 09 сентября 2010

Возможно добавить холст в JScrollPane ?

0 голосов
/ 08 октября 2017

BoxLayout отлично подходит для этого! Я был на твоем месте совсем недавно.

JPanel outer = new JPanel();//this will be our grey area
outer.setLayout(new BoxLayout(outer, BoxLayout.X_AXIS));

JPanel inner = new JPanel();//here's the drawing area
Dimension receiptSize = new Dimension(400, 400);//making a fixed size for the drawing area
inner.setPreferredSize(receiptSize);
inner.setMinimumSize(receiptSize);
inner.setMaximumSize(receiptSize);
inner.setBackground(new Color(255,255,255));//and making the drawing area white, just for clarity in this example

А теперь важная часть:

outer.add(Box.createHorizontalGlue());
outer.add(inner);
outer.add(Box.createHorizontalGlue());

И это будет держать внутреннюю панель по центру и фиксированного размера, независимо от масштаба окна!

Вот как это выглядит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...