如何在Quaqua中获得统一的工具栏?

特雷卡兹

我不知道如何强迫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;
        }
    }
}

结果看起来像这样:

我的示例的屏幕截图

这是Transmission的样子:

传输屏幕截图

我们的示例工具栏缺少统一的工具栏阴影。同样,您不能用鼠标拖动工具栏来拖动窗口。我确定这两个问题都源于同一个问题,Quaqua某种程度上没有意识到我希望此工具栏统一。

我尝试将apple.awt.brushMetalLook根窗格上的设置true这具有使窗口始终处于禁用状态的负面效果,并且无助于将窗口显示为统一的工具栏。

((与该问题无关的其他视觉问题:

  1. 文本上的抗锯齿没有使用LCD样式的抗锯齿(这是Java 7中的错误,没有已知的解决方法。)
  2. 没有浮雕(我想我知道如何解决这个问题,但这将涉及制作自己的ButtonUI。)
  3. 活动按钮的阴影只是较深,而在实际按钮中,有点“推入”外观(奇怪的是,默认的AquaToggleButtonUI可以正确显示,因此在极少数情况下,Quaqua提供的原生外观要比默认。)))
特雷卡兹

这是一个非常棘手的解决方案,它依赖于禁用Quaqua的某些位来使根窗格执行正确的操作,因为我发现默认的Aqua外观确实可以正常工作。

奇怪的事情:

  • Quaqua删除了工具栏按钮上的边框。
  • 如果尝试使用JDialog而不是JFrame,则会出现原始问题。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.HashSet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

import ch.randelshofer.quaqua.QuaquaManager;

public class SheetTest implements Runnable {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SheetTest());
    }

    @Override
    public void run() {
        try {
            QuaquaManager.setExcludedUIs(new HashSet<>(Arrays.<String>asList(
                "RootPane"
            )));
            UIManager.setLookAndFeel(QuaquaManager.getLookAndFeel());
        } catch (Exception ignored) {}

        JButton button = new JButton("Sheet me!");
        JToolBar toolBar = new JToolBar();
        JScrollPane content = new JScrollPane();
        JFrame frame = new JFrame();

        toolBar.setFloatable(false);
        toolBar.setOpaque(false);
        toolBar.add(button);

        frame.setLayout(new BorderLayout());
        frame.add(toolBar, BorderLayout.PAGE_START);
        frame.add(content, BorderLayout.CENTER);
        // Under current Aqua L&F, this doesn't actually look like brushed metal.
        // It looks like normal window titles.
        frame.getRootPane().putClientProperty("apple.awt.brushMetalLook", true);
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Quaqua中获得统一的工具栏?

来自分类Dev

如何在Android Studio中重新获得工具栏?

来自分类Dev

如何在核心工具栏聚合物组件中获得垂直居中

来自分类Dev

如何在核心工具栏聚合物组件中获得垂直居中

来自分类Dev

代号一种如何在工具栏的sideMenu图标中添加徽章

来自分类Dev

如何在Firefox工具栏中找回一个小的HTTPS Everywhere图标?

来自分类Dev

如何在列表活动中设置工具栏?

来自分类Dev

如何在工具栏中居中放置ImageView?

来自分类Dev

如何在PreferenceFragment中为工具栏充气?

来自分类Dev

如何在AppCompat中更改工具栏的菜单图标

来自分类Dev

如何在Qt Creator中更改工具栏布局?

来自分类Dev

如何在emacs中添加工具栏按钮?

来自分类Dev

如何在PhpStorm中删除工具栏

来自分类Dev

如何在Eclipse Luna中解锁工具栏

来自分类Dev

如何在Xamarin表单中启用工具栏

来自分类Dev

如何在Android中隐藏工具栏的阴影?

来自分类Dev

如何在HTML页面中添加底部工具栏

来自分类Dev

如何在PreferenceActivity中添加工具栏

来自分类Dev

如何在开始目标中隐藏工具栏

来自分类Dev

如何在Android中设计工具栏

来自分类Dev

如何在工具栏中显示按钮的原始颜色

来自分类Dev

如何在TeamViewer中以全屏模式隐藏工具栏?

来自分类Dev

如何在Firefox 29中隐藏“导航工具栏”?

来自分类Dev

如何在Firefox中卸载Google翻译工具栏

来自分类Dev

如何在Android中删除折叠工具栏

来自分类Dev

如何在工具栏按钮中更改文本?

来自分类Dev

如何在HTML页面中添加底部工具栏

来自分类Dev

如何在Eclipse中摆脱这个工具栏?

来自分类Dev

如何在片段的工具栏中包含 TabLayout

Related 相关文章

热门标签

归档