Г-образное окно приложения Java
Я хочу создать Java-приложение, которое имеет форму буквы "L", чтобы приложение занимало только левую и нижнюю границы экрана. Я также не хочу, чтобы нормальные границы и заголовок в верхней части. Я видел, как другие люди создавали круги и другие подобные формы, но не сложные формы. Это для компьютера с Windows XP и никогда не будет на любой другой ОС.
Итак, как бы я это сделал?
3 ответа
java.awt.Window
/javax.swing.JWindow
а также java.awt.Frame
/javax.swing.JFrame
с setUndecorated
создаст безрамные окна. Вы можете соединить два или более, чтобы создать L-образную форму.
Начиная с 6u10, Sun JRE также имеет нестандартный API или непрямоугольные и прозрачные окна.
Я думаю, что это должно быть возможно, хотя вам, вероятно, следует быть осторожным при размещении компонентов. Если вы посмотрите здесь и прочитаете Раздел о настройке формы окна, он скажет следующее: "Форма может быть любым экземпляром интерфейса java.awt.Shape". Если вы затем посмотрите на интерфейс Shape, java.awt.Polygon реализует этот интерфейс. Таким образом, вы должны иметь возможность реализовать многоугольник с буквой "L". Дать ему шанс.
Вот, пожалуйста, Аса, это именно то, что вам нужно:
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);
}