gpt4 book ai didi

java - 修改Java中的窗口菜单

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:43 27 4
gpt4 key购买 nike

如何在 Java 中修改 JFrame 的窗口菜单?这是左上角(在 Windows 中)应用程序图标后面的那个,其中包含“恢复”、“移动”、“最小化”、“调整大小”等项目......

最佳答案

不幸的是,我只找到了一种使用“金属装饰”的方法(我的意思是做 JFrame.setDefaultLookAndFeelDecorated(true);)。如果我找到一个系统 LaF,我当然会更新答案,但我认为这仍然值得一个答案。

输出:

enter image description here

代码:

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.io.BufferedReader;
import java.io.UnsupportedEncodingException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class Example {

public Example() {

JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame = new JFrame();

JMenu systemMenu = getSystemMenu(frame);
systemMenu.add(new JMenuItem("New JMenuItem"), 0);

for (Component component : systemMenu.getPopupMenu().getComponents()) {
if (component.toString().contains("JMenu")) {
((JMenuItem) component).setForeground(Color.RED);
}
}

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

private JMenu getSystemMenu(JFrame frame) {
for (Component c1 : frame.getLayeredPane().getComponents()) {
if (c1.toString().contains("MetalTitlePane")) {
for (Component c2 : ((Container) c1).getComponents()) {
if (c2.toString().contains("SystemMenuBar")) {
return (JMenu) ((Container) c2).getComponent(0);
}
}
}
}
return null;
}

public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
}
}

关于java - 修改Java中的窗口菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com