Substance LaF不允许Canvas动态缩小

时间:2011-05-31 22:09:56

标签: java swing awt look-and-feel substance

我正在尝试一些Swing LaF代码,我遇到了一个问题。

Active LaF: Substance.
Active Substance Skin: RavenSkin (tested with others).

我在内容窗格上使用带有BorderLayout的JFrame。我添加了一个带有按钮的JPanel,我在中心添加了一个JPanel到目前为止,非常好。使用鼠标可以动态调整窗口大小。

现在,我将Canvas添加到中心的JPanel。突然间,调整大小代码出现了一个错误 - 我可以通过拖动角来放大窗口,但我无法收缩它。我有一种奇怪的行为,JFrame只会变得越来越大 - 显然不是最佳的。

当我更改为不同的LaF(默认为Nimbus)时,行为按预期工作,我可以收缩和放大。错误的行为似乎仅限于物质。

这是包本身的错误吗?如果是这样,有没有办法解决它/绕过它仍然使用Canvas?


注意:我需要能够使用Canvas - 这一点是在JFrame中包含一个LWJGL应用程序,我希望能够使用比默认值更好看的LaF。


根据要求,这里有一些可编辑的,可运行的代码,可以显示错误(至少在我的机器上):

import java.awt.Canvas;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.RavenSkin;

public class CanvasTest extends JFrame
{
    private static final long serialVersionUID = -6209080597456869531L;

    public CanvasTest()
    {
        super("JFrame - Canvas Test");
        setSize(600, 400);
        setLocationRelativeTo(null);
        getContentPane().add(new Canvas());
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    }

    public static void main(String[] args)
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        SwingUtilities.invokeLater(new Thread() {
            public void run()
            {
                try
                {
                    UIManager.setLookAndFeel("org.pushingpixels.substance." +
                    "api.skin.SubstanceBusinessLookAndFeel");
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                SubstanceLookAndFeel.setSkin(new RavenSkin());
            }
        });

        new CanvasTest().setVisible(true);
    }
}

0 个答案:

没有答案