Java Граница Swing Focus слишком мала - PullRequest
1 голос
/ 20 апреля 2020

Позвольте мне начать с того, что я очень озадачен тем, что на этот вопрос нет ответа на stackoverflow - по крайней мере, я его не нашел. Так что я полагаю, что моя проблема должна указывать c, хотя я не понимаю, почему. Этот вопрос уже задавался аналогичным образом в течение 1 года go здесь

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

Вот весь мой код дизайна (его не так много, с тех пор как я только начал)

    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1000, 500);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JPanel MainPanel = new JPanel();
    MainPanel.setFocusCycleRoot(true);
    MainPanel.setBackground(Color.DARK_GRAY);
    MainPanel.setBounds(0, 0, 995, 465);
    contentPane.add(MainPanel);
    MainPanel.setLayout(null);

    JButton StartButton = new JButton("Launch Oasis");
    StartButton.setBorder(new LineBorder(Color.BLACK));
    StartButton.setBackground(new Color(169, 169, 169));
    StartButton.setForeground(new Color(0, 128, 128));
    StartButton.setBounds(397, 197, 200, 50);
    StartButton.setFont(new Font("Times New Roman", Font.PLAIN, 30));
    MainPanel.add(StartButton);

This is the button I'm talking about

Я хочу подчеркнуть то же самое, что сделал первоначальный автор, я хочу, чтобы рамка фокуса была закрашена, чтобы jButton.setFocusPainted(false); не решило мою проблему. Есть ли очевидная причина, по которой граница фокуса не масштабируется с размером кнопки?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Этот ответ содержит мое исследование в ответ на предоставленные Camickr источники.

Измените внешний вид вашего приложения на Windows Look and Feel, добавив следующее к вашему основному методу перед создание JFrame. Чтобы это работало, вам нужно import javax.swing.UIManager;:

try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (Exception e) {
        System.out.println("Error");
    }

. Это даст вам рамку фокусировки рядом с рамкой кнопки, охватывающей всю кнопку. Обратите внимание, что этот метод может генерировать кучу исключений (ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException). Для получения дополнительной информации по этой теме c вы можете посетить раздел Изменение вида и ощущения учебного руководства по качелям.

0 голосов
/ 20 апреля 2020

Прежде всего несколько замечаний по поводу кода:

  1. Имена переменных НЕ должны начинаться с символа верхнего регистра. Изучите Java соглашения об именах и следуйте им. Форум выделяет ваши переменные так, как будто они являются именами классов, что затрудняет чтение вашего кода.

  2. Swing был разработан для использования с менеджерами компоновки. Не используйте setBounds (). Прочитайте раздел из учебника Swing по Layout Managers для получения дополнительной информации и рабочих примеров.

Есть ли очевидная причина того, что граница фокуса не масштабируется с помощью размер кнопки?

Есть ли очевидная причина, по которой она должна масштабироваться с размером кнопки?

Граница фокуса разработана для визуальной подсказки, когда кнопка имеет фокус.

Каждый LAF может выбрать, как это должно быть сделано.

Этот LAF выбирает рамку фокусировки вокруг текста / значка.

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

Если вам не нравится тот факт, что левые / правые поля больше, чем верхние / нижние поля, вы можете использовать:

button.setMargins( new Insets(5, 5, 5, 5) );

Снова. дизайнеры LAF хотели бы, чтобы горизонтальные поля были больше. Редактировать:

Есть ли способ придать этому jButton windows чувство

Использовать Windows LAF.

Есть раздел в учебнике по Swing на "Modifying the Look and Feel". Вам уже дали ссылку на учебник по Swing. Вы найдете раздел в оглавлении, нажав на ссылку «След», расположенную в верхней части страницы каждого раздела в учебнике.

...