我遵循了本教程:http://explodingpixels.wordpress.com/2008/05/02/sexy-swing-app-the-unified-toolbar/在mac上创建一个看起来像本机的工具栏。问题可能是我没有正确地将它添加到JFrame中,或者可能误解了某些内容。
程序的工作方式是在工具栏中添加一个面板(或者在它下面,我认为 - 目前尚不清楚)。万一有混淆:统一的工具栏是常规工具栏,只有里面的按钮。
这应该是这样的:
这就是它的样子:(我应该使用不同的按钮,这应该没关系,是吗?)
Unified Toolbar Panel
的代码:
package gui;
import java.awt.Color;
import java.awt.Window;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import com.jgoodies.forms.factories.Borders;
public class UnifiedToolbarPanel extends JPanel {
public static final Color OS_X_UNIFIED_TOOLBAR_FOCUSED_BOTTOM_COLOR =
new Color(64, 64, 64);
public static final Color OS_X_UNIFIED_TOOLBAR_UNFOCUSED_BORDER_COLOR =
new Color(135, 135, 135);
public UnifiedToolbarPanel() {
// make the component transparent
setOpaque(false);
// create an empty border around the panel
// note the border below is created using JGoodies Forms
setBorder(Borders.createEmptyBorder("3dlu, 3dlu, 1dlu, 3dlu"));
}
@Override
public Border getBorder() {
Window window = SwingUtilities.getWindowAncestor(this);
return window != null && window.isFocused()
? BorderFactory.createMatteBorder(0,0,1,0,
OS_X_UNIFIED_TOOLBAR_FOCUSED_BOTTOM_COLOR)
: BorderFactory.createMatteBorder(0,0,1,0,
OS_X_UNIFIED_TOOLBAR_UNFOCUSED_BORDER_COLOR);
}
}
JFrame的代码:
package gui;
import java.awt.EventQueue;
import gui.*;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JSplitPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.Color;
import javax.swing.plaf.metal.*;
public class HaiCue extends JFrame{
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
HaiCue window = new HaiCue();
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public HaiCue() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
setForeground(Color.BLACK);
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getRootPane().putClientProperty("apple.awt.brushMetalLook", Boolean.TRUE);
JPanel panel = new UnifiedToolbarPanel();
// panel.setLayout(new WrapLayout());
add(panel, BorderLayout.NORTH); //<--- I think the problem may be how I add it... I have tried several different ways.
ToolButton lblStop = new ToolButton("Stop", new ImageIcon(getClass().getResource("/images/stop.png")));
panel.add(lblStop);
ToolButton btnToolBox = new ToolButton("Tool Box", new ImageIcon(getClass().getResource("/images/Toolbox.png")));
panel.add(btnToolBox);
ToolButton btnInspector = new ToolButton("Inspector", new ImageIcon(getClass().getResource("/images/Toolbox.png")));
panel.add(btnToolBox);
}
}
我正在运行OSX 10.8.2和Java 1.7.0_13
答案 0 :(得分:2)
工具栏中按钮的首选大小与所提供的Icon
的大小密切相关。请注意,pack()
对于使“Window
的大小适合其子组件的首选大小和布局至关重要。”下面的示例忽略了article中引用的一些更精细的点,但它捕获了基本的geomtry。尝试使用OptionPane.warningIcon
来查看效果。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.UIManager;
/**
* @see http://stackoverflow.com/a/16694524/230513
*/
public class Main {
private void display() {
JFrame f = new JFrame("Main");
f.getRootPane().putClientProperty("apple.awt.brushMetalLook", true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(createToolBar(f), BorderLayout.NORTH);
f.add(new JTextArea(5, 16));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private JToolBar createToolBar(final Component parent) {
JToolBar bar = new JToolBar("Toolbar");
bar.setFloatable(false);
bar.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
bar.add(createButton("FileChooser.detailsViewIcon"));
bar.add(createButton("FileChooser.homeFolderIcon"));
bar.add(createButton("FileChooser.newFolderIcon"));
return bar;
}
private JButton createButton(String s) {
JButton b = new JButton(UIManager.getIcon(s));
b.setHorizontalTextPosition(JButton.CENTER);
b.setVerticalTextPosition(JButton.CENTER);
return b;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Main().display();
}
});
}
}
答案 1 :(得分:0)
请查看最后一行代码,
panel.add(btnInspector );// repalce btnInspector with btnToolBox