gpt4 book ai didi

Java 方法适用于 Windows 但不适用于 Macintosh?

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

我有一个非常奇怪的方法,用于隐藏 JInternalFrame 的标题栏。现在的困境是下面的方法适用于 windows 平台,

((javax.swing.plaf.basic.BasicInternalFrameUI) aXInternalFrame.getUI()).setNorthPane(null);

但在 Macintosh 上不行!任何专家都有任何想法可以解释使此方法在 Mac 上不可用的内部过程。

是否有任何方法可以在两个平台上工作以隐藏 JInternalFrame 的标题栏?

谢谢

最佳答案

在 Mac OS X 上,com.apple.laf.AquaInternalFrameUI 的一个实例定义了内部框架的外观。您可以通过设置 isPalette 属性并专门在 Mac OS X 上禁用框架图标来最小化差异,如下所示。

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.plaf.basic.BasicInternalFrameUI;

/** @see http://stackoverflow.com/questions/7218971 */
public class InternalFrame {

private static final int DELTA = 40;
private JDesktopPane desktop = new JDesktopPane();
private int offset = DELTA;

public InternalFrame() {
JFrame f = new JFrame("Add Frame");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(400, 400));
JPanel p = new JPanel();
p.add(new JButton(new AbstractAction("Add") {

@Override
public void actionPerformed(ActionEvent e) {
createInternalFrame();
}
}));
f.add(p, BorderLayout.SOUTH);
createInternalFrame();
f.add(desktop, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

private void createInternalFrame() {
JInternalFrame internalFrame = new JInternalFrame(
"Internal Frame");//, true, true, true, true);
desktop.add(internalFrame);
internalFrame.setLocation(offset, offset);
offset += DELTA;
if (System.getProperty("os.name").startsWith("Mac OS")) {
internalFrame.putClientProperty("JInternalFrame.isPalette", true);
} else {
((BasicInternalFrameUI) internalFrame.getUI()).setNorthPane(null);
}
internalFrame.add(createTabbedPane());
internalFrame.pack();
internalFrame.setVisible(true);
}

// take up some space
private JTabbedPane createTabbedPane() {
JTabbedPane jtp = new JTabbedPane();
createTab(jtp, "One");
createTab(jtp, "Two");
return jtp;
}

private void createTab(JTabbedPane jtp, String s) {
jtp.add(s, new JLabel("TabbedPane " + s, JLabel.CENTER));
}

public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
InternalFrame myInternalFrame = new InternalFrame();
}
});
}
}

关于Java 方法适用于 Windows 但不适用于 Macintosh?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218971/

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