我不知道如何强制 Quaqua 在我的窗口上使用统一的工具栏。
我已经完成了我看到的其他帖子建议修复的所有内容。大多数人似乎忘记了,setFloatable(false)
但我们的总是这样。
不管怎样,我把它浓缩成一个简单的例子:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import ch.randelshofer.quaqua.QuaquaManager;
public class QuaquaUnifiedToolbarTest implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new QuaquaUnifiedToolbarTest());
}
@Override
public void run() {
try {
UIManager.setLookAndFeel(QuaquaManager.getLookAndFeel());
} catch (UnsupportedLookAndFeelException e) {
// Ignore it.
}
JToolBar toolBar = new JToolBar();
toolBar.putClientProperty("Quaqua.ToolBar.style", "title");
toolBar.setFloatable(false);
ButtonGroup paneButtonGroup = new ButtonGroup();
for (int i = 1; i <= 3; i++) {
JToggleButton button = new JToggleButton("Section " + i);
button.setIcon(new PlaceholderIcon());
button.setHorizontalTextPosition(SwingConstants.CENTER);
button.setVerticalTextPosition(SwingConstants.BOTTOM);
button.putClientProperty("JComponent.sizeVariant", "small");
button.putClientProperty("Quaqua.Button.style", "toolBarTab");
paneButtonGroup.add(button);
toolBar.add(button);
}
JDialog dialog = new JDialog(null, "Preferences", Dialog.ModalityType.MODELESS);
dialog.setLayout(new BorderLayout());
dialog.add(toolBar, BorderLayout.PAGE_START);
dialog.setSize(800, 600);
dialog.setVisible(true);
}
private static class PlaceholderIcon implements Icon {
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_BEVEL, 1.0f,
new float[] { 2.0f, 2.0f }, 1.0f));
g2d.draw(new Rectangle(x, y, 32, 32));
}
@Override
public int getIconWidth() {
return 32;
}
@Override
public int getIconHeight() {
return 32;
}
}
}
结果如下所示:
这是传输的样子:
我们的示例工具栏缺少统一的工具栏阴影。另外,不能用鼠标拖动工具栏来拖动窗口。我确信这两个问题都源于同一个问题,Quaqua 不知何故没有意识到我想要统一这个工具栏。
我尝试apple.awt.brushMetalLook
在根窗格上设置为true
. 这具有使窗口始终处于禁用状态的负面影响,并且无助于将其显示为统一的工具栏。
((与此问题无关的其他视觉问题:
- 文本上的抗锯齿没有使用 LCD 样式的抗锯齿(这是 Java 7 中的一个错误,没有已知的解决方法。)
- 没有压花(我想我知道如何解决这个问题,但它需要制作我自己的 ButtonUI。)
- 活动按钮的阴影更暗,而在真实按钮中,有一点“推入”的外观(奇怪的是,默认的 AquaToggleButtonUI 做到了这一点,因此 Quaqua 提供的原生外观比默认。) ))