當您將JButton添加到JToolbar時,該按鈕會採用特定的外觀(如果將其添加到Jpanel中,則該外觀不一樣)。 我創建了一個類似於JToolbar的組件,我想要相同的行爲。 問題:我檢查了JToolbar類以找到一些特定的負責代碼來更改添加組件的顯示(更改組件特定的繪製方法或UI委託等)。我沒有找到任何東西!我不明白JToolbar是如何工作的。 任何人都可以解釋我是如何工作的?Java Swing:JToolbar如何更改按鈕的外觀?
非常感謝,
埃爾韋紀堯姆
當您將JButton添加到JToolbar時,該按鈕會採用特定的外觀(如果將其添加到Jpanel中,則該外觀不一樣)。 我創建了一個類似於JToolbar的組件,我想要相同的行爲。 問題:我檢查了JToolbar類以找到一些特定的負責代碼來更改添加組件的顯示(更改組件特定的繪製方法或UI委託等)。我沒有找到任何東西!我不明白JToolbar是如何工作的。 任何人都可以解釋我是如何工作的?Java Swing:JToolbar如何更改按鈕的外觀?
非常感謝,
埃爾韋紀堯姆
這似乎由MetalButtonUI
類的update()
方法來處理。下面是從JDK5_07代碼:
public void update(Graphics g, JComponent c) {
AbstractButton button = (AbstractButton)c;
if ((c.getBackground() instanceof UIResource) &&
button.isContentAreaFilled() && c.isEnabled()) {
ButtonModel model = button.getModel();
if (!MetalUtils.isToolBarButton(c)) {
if (!model.isArmed() && !model.isPressed() &&
MetalUtils.drawGradient(
c, g, "Button.gradient", 0, 0, c.getWidth(),
c.getHeight(), true)) {
paint(g, c);
return;
}
}
else if (model.isRollover() && MetalUtils.drawGradient(
c, g, "Button.gradient", 0, 0, c.getWidth(),
c.getHeight(), true)) {
paint(g, c);
return;
}
}
super.update(g, c);
}
的isToolBarButton()
方法只是檢查,如果父容器是一個JToolBar對象,所以我想一個解決方案是你的JButton隨時添加到JToolBar中,然後將工具欄添加到您的真實集裝箱。否則,我想,您需要編寫自己的自定義UI並覆蓋update()方法。
我認爲這只是一個禁用按鈕。如果你讓你禁用按鈕,它將看起來類似於toolBar中的一個(黑色文本顏色除外)。要更改禁用按鈕的文本顏色,您可以覆蓋UIManager的默認屬性。並且使按鈕更有可能在toolBar中添加mouseListener並在mouseEnter和Exit方法中更改其啓用狀態。
實施例:
JFrame frame = new JFrame("tool bar button demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(150, 150);
frame.setLayout(new FlowLayout());
JToolBar bar = new JToolBar();
bar.add(new JButton("A button"));
frame.add(bar);
// to make text black in disabled button.
UIManager.getDefaults().put("Button.disabledText",Color.BLACK);
JButton button = new JButton("A button");
button.setEnabled(false);
// if you are setting true or not changing the roll over property
// of toolBar then following listerner help to give similar effect
button.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent me) {
}
@Override
public void mousePressed(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
((JButton)me.getSource()).setEnabled(false);
}
@Override
public void mouseEntered(MouseEvent me) {
((JButton)me.getSource()).setEnabled(true);
}
@Override
public void mouseClicked(MouseEvent me) {
}
});
frame.add(button);
frame.setVisible(true);
Thx!但我的問題是關於JToolbar自動管理其按鈕外觀的方式。我想爲我的自定義小部件實現相同的功能。 – paranoia25 2011-12-22 14:32:16
偉大的代碼,謝謝,+1 – mKorbel 2011-12-22 16:58:02
好thx!這正是我需要的!我將嘗試將myJButton添加到一個可調用的JToolBar中。 – paranoia25 2011-12-22 17:21:50