2014-09-10 3 views
1

Следующий код приводит к прозрачному окну в Windows (8.1), но непрозрачному окну в Ubuntu (14.04). Как я могу получить прозрачное окно с красным контуром в Ubuntu 14.04?Прозрачная рамка работает правильно в Windows, но не в Linux

Моя цель - создать неизолированное окно с «закругленными (прозрачными) краями», поэтому метод setOpacity() не поможет, так как это повлияет на полное окно, даже если оно работает в обеих операционных системах.

public static void main(String[] args) { 
    JFrame f = new JFrame(); 
    f.setUndecorated(true); 
    f.setBackground(new Color(0,255,0,0)); 
    f.setSize(512, 512); 
    f.add(new JPanel() { 
     @Override 
     protected void paintComponent(Graphics g) { 
      g.setColor(Color.RED); 
      g.drawRect(0, 0, 511, 511); 
     } 
    }); 
    f.setVisible(true); 
} 
+0

У вас [Как создать форматированное окно] (http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html#shaped)? Соедините его с ['RoundRectangle2D'] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/RoundRectangle2D.html) –

+0

@peeskillet Форма окна работает на обоих, но тогда вы имеют те грубые края из-за отсутствия сглаживания. Окно Ubuntu по-прежнему заполняет зеленый фон. – Roland

ответ

1

Я нашел источник проблемы. Это связано с установкой нескольких мониторов в Ubuntu. Несмотря на это, вот решение - что заставит его работать на привилегированном мониторе:

Добавьте следующий код перед (вызовом SetVisible):

f.setLocationRelativeTo(null); 

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

Благодарим вас за ввод. Очень благодарен! :)

0

Не все оконные манипуляторы на linux поддерживают прозрачные окна. Если оконный менеджер не поддерживает прозрачные окна, t будет отображаться как обычное окно. Поэтому сначала проверьте, что ваш оконный менеджер поддерживает прозрачные окна (с GraphicsDevice#isWindowTranslucencySupported()).

+0

Я тоже это испытал. Следующее возвращает true как для Windows, так и для Ubuntu для isWindowTranslucencySupported(): WindowTranslucency.PERPIXEL_TRANSLUCENT, PERPIXEL_TRANSPARENT, TRANSLUCENT – Roland

Смежные вопросы