Невозможно изменить цвет Titlebar и JMenuBar

Я пытаюсь изменить либо цвет строки заголовка Windows, либо цвет JMenuBar. Я устанавливаю каждый внешний вид для Color.GREEN через UIManager.put( "XXXXXXX", Color.GREEN), где XXXXX - просто заполнитель. Большинство элементов меняются, но некоторые нет. Смотрите изображение для примера.

Красный - моя проблема (другие тоже странные, но все в порядке).

Сборка GUI с помощью построителя графического интерфейса NetBeans ( JFrame ->JMenuBar)

Спасибо за вашу помощь.

ОБНОВЛЕНИЕ Может быть, я должен упомянуть, что:

  1. Используется LAF "Windows"
  2. Используемая ОС: Windows 10

ОБНОВЛЕНИЕ РЕШЕНИЯ - ВРЕМЕННОЕ Хорошо, я получил кое-что работающее прямо сейчас (не могу проверить много сделаю позже). Я должен создать JFrame, прежде чем перейти на Windows LAF, это приводит к кадру, подобному @bhavna garg и @Ganesh Patel, затем я изменяю LAF на окна, и все другие элементы выглядят так, как я хотел. Цвета не правильные, и это нереальное решение, я думаю, но я проверю это позже

4 ответа

Решение

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

Вот код:

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JRootPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;

public class MyLookAndFeel {
  JFrame frame;
  JMenuBar menubar;
  MetalLookAndFeel metal;
  JMenu menu;

  public MyLookAndFeel() {
    metal = new MetalLookAndFeel();
    metal.setCurrentTheme(new MetalTheme());
    try {
      UIManager.setLookAndFeel(metal);
    }
    catch(UnsupportedLookAndFeelException e) {
      e.printStackTrace();
    }
    frame = new JFrame("Hello");

    frame.setUndecorated(true);
    frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

    menubar = new JMenuBar();
    menubar.setOpaque(true);
    menubar.setBackground(Color.green);

    menu = new JMenu("File");
    menubar.add(menu);
    frame.setJMenuBar(menubar);

    frame.setVisible(true);
    frame.setSize(100,100);

  }
  public class MetalTheme extends DefaultMetalTheme {

    @Override
    public ColorUIResource getMenuBackground() {
      return new ColorUIResource(Color.GREEN);
    }
    public ColorUIResource getWindowTitleBackground() {
        return new ColorUIResource(java.awt.Color.green);
    }
  }
  public static void main(String args[]) {
    new MyLookAndFeel();
  }
}

Вы можете увидеть рамку Изображение кадра

Смотрите для заголовка см. Это изображение Чтобы установить цвет заголовка используйте:

  frame.getRootPane().setWindowDecorationStyle(5);

5 - это константа, которая придаст зеленый цвет менубару. Вы можете использовать числа от 1 до 8. Пример: 8 даст оранжевый цвет.

Чтобы установить цвет меню, используйте:

 menubar.setBackground(Color.RED);
 menubar.setOpaque(true);

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

Я знаю, что немного опаздываю, но это может помочь другим:

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

Кто-то может сказать:

Это невозможно. JFrame верхнего уровня управляется внешним видом базовой ОС.

Если вы хотите получить доступ к строке заголовка, сначала у вас должен быть доступ к собственным библиотекам движка Java. К счастью, есть способ:

Первый шаг: JNA предоставляет программам Java легкий доступ к собственным общим библиотекам без написания чего-либо, кроме кода Java. Таким образом, вы можете использовать этот репозиторий для доступа к ним: JNA.

      Scroll down to readme and find the downloadable library.

Некоторые элементы могут откладываться в зависимости от используемой вами платформы. Поэтому убедитесь, что вы используете jna-platform-5.8.0.jar чтобы ваше приложение было совместимо с любыми платформами.

Второй шаг: если вы не знаете, как использовать библиотеки JNA, вы можете использовать это в качестве примера: пример

в любом случае, это может решить вашу проблему с цветом строки заголовка;)

Основная статья: Внешняя ссылка

Help me improve my writing in English by telling me my mistakes :D

Другие вопросы по тегам