2013-04-20 54 views
0

我有一个JToolbar包含多个JPanels(因为我想每个人都有特定的边框)。 不幸的是,外观&感觉管理器不会将JPanels识别为属于工具栏,因此JButtons因此呈现为普通按钮(即,没有工具栏上的特殊鼠标悬停效果)。Java Swing JToolbar与面板:外观和感觉

JToolbars替代JPanels不是一个选项,因为LAF渲染器给它一个特殊的背景。

任何其他选项/提示?

+1

后尽快的SSCCE。因为在我的情况下一切正常。 – 2013-04-20 12:44:48

回答

1

如下图所示,您可以根据需要更改工具栏的布局并添加组件。您也可以有任意数量的工具栏。图中显示了L & F combo here。请注意,JToolBaraddSeparator()方法提供了F专用JToolBar.Separator的L &。

test image

import component.Laf; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import javax.swing.AbstractAction; 
import javax.swing.Action; 
import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JToolBar; 

/** 
* @see https://stackoverflow.com/a/16121288/230513 
*/ 
public class JToolBarTest { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS)); 
     // https://stackoverflow.com/a/11949899/230513 
     f.add(Laf.createToolBar(f)); 
     f.add(createBar()); 
     f.add(createBar()); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private JToolBar createBar() { 
     JToolBar toolBar = new JToolBar(); 
     toolBar.add(createPanel()); 
     toolBar.addSeparator(); 
     toolBar.add(createPanel()); 
     return toolBar; 
    } 

    private JPanel createPanel() { 
     JPanel panel = new JPanel(); 
     panel.setBorder(BorderFactory.createTitledBorder("Panel")); 
     Action buttonAction = new AbstractAction("Button"){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println(e.getActionCommand() 
        + " " + e.getSource().hashCode()); 
      } 
     }; 
     panel.add(new JButton(buttonAction)); 
     panel.add(new JButton(buttonAction)); 
     return panel; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new JToolBarTest().display(); 
      } 
     }); 
    } 
} 
+1

非常感谢这个例子。我发现在这里按钮的外观和感觉也不是与工具栏的外观和感觉有关(即通常只有当鼠标移过时才能看到按钮的边框)。我解决它的方式是用JToolbars替换所有子面板,但这远非理想。 – Tom 2013-04-20 15:27:14

+0

Aqua按钮渲染方式不同,但我看到大多数L&F都是相同的。你可能会看[大小变体](http://stackoverflow.com/a/2900157/230513)。请不要犹豫,使用[sscce](http://sscce.org/)编辑您的问题,例如这个,它可以说明您遇到的任何问题。您可以通过点击左侧的向上箭头来选出有用的答案。 – trashgod 2013-04-20 19:14:25