Г-образное окно приложения Java - PullRequest
1 голос
/ 22 октября 2009

Я хочу создать Java-приложение, имеющее форму буквы «L», чтобы оно занимало только левую и нижнюю границы экрана. Я также не хочу, чтобы нормальные границы и заголовок в верхней части. Я видел, как другие люди создавали круги и другие подобные формы, но не сложные формы. Это для компьютера с Windows XP и никогда не будет на любой другой ОС.

Итак, как бы я это сделал?

Ответы [ 3 ]

4 голосов
/ 22 октября 2009

java.awt.Window / javax.swing.JWindow и java.awt.Frame / javax.swing.JFrame с setUndecorated создадут безрамные окна. Вы можете сложить два или более вместе, чтобы создать L-образную форму.

Начиная с 6u10 Sun JRE также имеет нестандартный API или непрямоугольные и прозрачные окна.

2 голосов
/ 22 октября 2009

Я думаю, что это должно быть возможно, хотя вам, вероятно, следует быть осторожным при размещении компонентов. Если вы посмотрите здесь и прочитали Раздел о настройке формы окна, он говорит следующее: «Форма может быть любым экземпляром интерфейса java.awt.Shape». Если вы посмотрите на интерфейс Shape, java.awt.Polygon реализует этот интерфейс. Таким образом, вы должны иметь возможность реализовать многоугольник с буквой "L". Дайте ему шанс.

1 голос
/ 13 ноября 2009

Вот, пожалуйста, Аса, это именно то, что вам нужно:

import com.sun.awt.AWTUtilities;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;

public static void main(String[] args)
{
    // create an undecorated frame
    final JFrame lframe = new JFrame();                
    lframe.setSize(1600, 1200);
    lframe.setUndecorated(true);

    // using component resize allows for precise control
    lframe.addComponentListener(new ComponentAdapter() {
        // polygon points non-inclusive
        // {0,0} {350,0} {350,960} {1600,960} {1600,1200} {0,1200}
        int[] xpoints = {0,350,350,1600,1600,0};
        int[] ypoints = {0,0,960,960,1200,1200};

        @Override
        public void componentResized(ComponentEvent evt)
        {  
            // create the polygon (L-Shape)
            Shape shape = new Polygon(xpoints, ypoints, xpoints.length);

            // set the window shape
            AWTUtilities.setWindowShape(lframe, shape);
        }
    });

    // voila!
    lframe.setVisible(true);
}

ссылка -> «Настройка формы окна»

...