Вещество LaF не позволяет Canvas динамически сокращаться - PullRequest
0 голосов
/ 01 июня 2011

Я экспериментирую с кодом Swing LaF и столкнулся с проблемой.

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

Я использую JFrame с BorderLayout на панели содержимого. Я добавил JPanel с кнопкой сбоку и добавил JPanel в центре. Пока все хорошо. Окно динамически изменяется с помощью мыши.

Теперь я добавляю холст к 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);
    }
}
...