Swing: Как сделать непрямоугольные окна с мягкими границами?

Используйте приведенную ниже команду для решения вашей проблемы,

pip install mysql-python
apt-get install python3-mysqldb libmysqlclient-dev python-dev

Работает на Debian

6
задан ivan_ivanovich_ivanoff 13 June 2009 в 17:14
поделиться

3 ответа

Вы читали эту статью:

http://www.pushing-pixels.org/?p=272

В ней упоминается мягкое вырезание и предыдущие статьи, которые вы упомянули, но также включает некоторый исходный код для реализации мягко обрезанного окна, прямая ссылка находится здесь:

http://www.pushing-pixels.org/wp-content/uploads/2008/03/softclippedwindow.java

Это должен предоставить вам возможное решение того, что вы хотите сделать.

0
ответ дан 17 December 2019 в 20:34
поделиться
import java.awt.*;

public class First extends Applet
   {
   public void paint(Graphics g)
             {
             g.drawRect(100,50,500,800);
             }
   }
/*<Applet code="First.class"height=500 width=500>
  </Applet>
*/
-1
ответ дан 17 December 2019 в 20:34
поделиться

Вот мой вариант окна верхнего уровня с мягким клиппированием. Примечание: фигурные окна используют проприетарный API (com.sun.awt.AWTUtilities) и не гарантируют работу на JVM, отличных от Sun. Однако в JDK 7 оно становится частью класса Window.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class MySoftClippedWindow extends JPanel     {
    public MySoftClippedWindow()         {
        super();
        setLayout(new GridBagLayout());
        JButton button = new JButton(new AbstractAction("Close") {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        button.setOpaque(false);
        add(button);
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g.create();

        int width = getWidth();
        int height = getHeight();

        // Create a soft clipped image for the background
        BufferedImage img = java_2d_tricker(g2d, width, height);
        g2d.drawImage(img, 0, 0, null);

        g2d.dispose();
    }

    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                final JWindow w = new JWindow();
                Container cp = w.getContentPane();
                cp.setLayout(new BorderLayout());
                cp.add(new MySoftClippedWindow());
                w.setAlwaysOnTop(true);
                com.sun.awt.AWTUtilities.setWindowOpaque (w, false);
                w.setSize(200, 200);
                w.setVisible(true);
            }
        });
    }

    /*
     * This code is taken from
     * http://weblogs.java.net/blog/campbell/archive/2006/07/java_2d_tricker.html
     */
    private BufferedImage java_2d_tricker(Graphics2D g2d, int width, int height) {
        GraphicsConfiguration gc = g2d.getDeviceConfiguration();
        BufferedImage img = gc.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
        Graphics2D g2 = img.createGraphics();
        g2.setComposite(AlphaComposite.Clear);
        g2.fillRect(0, 0, width, height);
        g2.setComposite(AlphaComposite.Src);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor(Color.WHITE);
        g2.fillOval(width / 4, height / 4, width / 2, height / 2);
        g2.setComposite(AlphaComposite.SrcAtop);
        g2.setPaint(new GradientPaint(0, 0, Color.RED, 0, height, Color.YELLOW));
        g2.fillRect(0, 0, width, height);
        g2.dispose();
        return img;
    }
}
3
ответ дан 17 December 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: