2013-09-21 4 views
4

У меня есть приложение JFrame для моего приложения, и я хотел бы сделать углы рамки, закругленные несколькими пикселями.Java закругленные углы на JFrame?

Id нравится делать это без использования прозрачности на JFrame и использования фонового изображения внутри JPanel - возможно ли это?

+0

Итак, ваша рама не украшена? Если это так, вы можете переопределить метод paintComponent и нарисовать настраиваемую форму. – BackSlash

+0

Да, мой кадр не декорирован, как бы я это сделал? – Alosyius

+0

@BackSlash 'paintComponent' в JComponent, как JPanel, не непосредственно в jframe. – nachokk

ответ

10

Это возможно с недекорированного кадра, рассмотрим следующий пример:

JFrame frame = new JFrame(); 
frame.setUndecorated(true); 
frame.setShape(new RoundRectangle2D.Double(10, 10, 100, 100, 50, 50)); 
frame.setSize(300, 200); 
frame.setVisible(true); 

Этот код работает на Java 7. Для Java 6 (так как обновление 10), вы можете сделать то же самое с AWTUtilities.setWindowShape:

JFrame frame = new JFrame(); 
frame.setUndecorated(true); 
AWTUtilities.setWindowShape(frame, new RoundRectangle2D.Double(10, 10, 100, 100, 50, 50)); 
frame.setSize(300, 200); 
frame.setVisible(true); 
+0

'setShape', похоже, не существует – Alosyius

+3

Это означает, что вы не используете Java 7. См. Обновленный ответ для рецепта Java 6 – Jk1

3

попробуйте это. его работы:

yourframe.setBackground(new Color(0, 0, 0, 180)); 
yourframe.setUndecorated(true); 
yourframe.addComponentListener(new ComponentAdapter() { 
       @Override 
       public void componentResized(ComponentEvent e) { 
        setShape(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 80, 80)); 
       } 
      }); 
Смежные вопросы