Я не могу понять, как заставить 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
. Это отрицательно сказывается на том, что окно всегда выглядит отключенным, и ничего не делает, чтобы оно отображалось как единая панель инструментов.
(( Разные другие визуальные проблемы, не связанные с этим вопросом:
- Сглаживание текста не использует сглаживание в стиле ЖК-дисплея (это ошибка в Java 7, обходной путь которой неизвестен).
- Нет тиснения (думаю, я знаю, как это исправить, но это потребует создания моего собственного ButtonUI).
- Активная кнопка просто заштрихована темнее, в то время как реальная выглядит немного «вдавленной» (как ни странно, интерфейс AquaToggleButtonUI по умолчанию делает это правильно, так что это редкий случай, когда Quaqua обеспечивает менее родной вид, чем дефолт.) ))
Quaqua.ToolBar .style
установлено наgradient
... - person MadProgrammer   schedule 19.12.2013