Могут ли по-разному выглядеть и чувствовать себя разные исходные свойства компонентов? - PullRequest
0 голосов
/ 19 апреля 2019

Когда мы создаем компонент, этот компонент принимает некоторые начальные значения, и он будет стилизован в соответствии с активным Look & Feel.Например, JButton начнется с горизонтального выравнивания, равного 0 (возможно, SwingConstants.CENTER).

Мой вопрос заключается в том, способны ли эти взгляды «переопределить» эти начальные значения по умолчаниюкомпоненты (я не говорю о NimbusButton extends JButton).Опять же, я имею в виду только те свойства, которые имеют все компоненты, а не стили и как они выглядят (даже если некоторые из этих свойств влияют на внешний вид компонента).

Я проверил предыдущее значение(JButton.horizontalAlignment) с внешним видом и интерфейсом Java, внешним видом и интерфейсом моей системы (Windows 10) и Nimbus.Значение, кажется, остается прежним. Но как насчет других LAF или других значений из других Компонентов?

Можно сказать, что мой вопрос может быть выражен также как "Что вид и чувства могут измениться"?

public class LookAndFeels {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            // No look and feel
            System.out.println(new JButton().getHorizontalAlignment());

            // Nimbus
            setNimbusLAF();
            System.out.println(new JButton().getHorizontalAlignment());

            setSystemLAF();
            System.out.println(new JButton().getHorizontalAlignment());
        });
    }

    private static void setSystemLAF() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
                | UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
    }

    private static void setNimbusLAF() {
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1 Ответ

1 голос
/ 21 апреля 2019

на этот вопрос не может быть полного ответа (поверьте мне, когда я говорю, что он слишком сложный, я реализую его с нуля, и это уже 4 месяца, и я даже не знаю, близок ли я к этому!).

Мой вопрос заключается в том, способны ли эти элементы "переопределить" эти начальные значения компонентов по умолчанию

да и нет, они могут изменитьсятакие свойства, но они обязаны чтить их.Кроме того, большинство начальных значений являются первыми отображаемыми значениями внешнего вида, здесь это даст вам подсказку о том, что произошло при вашей первой печати

, реальный ответ будет проверятьComponentUI реализация того, о чем вы спрашиваете.

вы - кодер, так что вы не удивитесь, узнав, что они могут измениться, так же, как любой код вне оригинальной упаковки (так каккод - это код !!).

Я проверил предыдущее значение (JButton.hor HorizontalAlignment) с использованием внешнего вида Java, внешнего вида моей системы (Windows 10) и Nimbus.Значение, кажется, остается прежним.Но как насчет других L & F или других значений из других Компонентов?

у каждого объекта пользовательского интерфейса есть метод с именем installUI(JComponent c) этот ответ на вопрос оборачивается вокруг этого метода, этот метод вызывается при изменении пользовательского интерфейсаи в зависимости от их реализации, они изменяют некоторые свойства в соответствии с их потребностями (например, возьмем любой из темных L & F в качестве примера, их реализация для AbstractButton ui должна будет установить фон темным цветом, а передний план -яркий цвет, чтобы текст отображался, поскольку он темный).

"Что может изменить внешний вид и ощущение"

Многие люди думают, что пользовательский интерфейс контролирует маленькийбиты компонента, но в действительности это все от пользовательского интерфейса !!например, у AbstractButton есть текст, многие думают, что пользовательский интерфейс не несет ответственности за его отображение, но это наоборот! если пользовательский интерфейс не вызывал Graphics.drawString(AbstractButton.getText(),x,y) (или что-то эквивалентное) где-то в их paint(Graphics g,JComponent c) методе noтекст будет

, поэтому краткий ответ на ваш вопрос «каждая вещь на экране».

...