如何使用带有左右箭头的Java微调器?
我在JavaSwing中使用过JavaSpinner,但它有上下箭头,有没有办法设置它的方向,使箭头向左和向右 多亏了让·弗朗索瓦·萨瓦德的回答,我又向前迈进了一步,但仍然不完全正确,我有以下几句话:如何使用带有左右箭头的Java微调器?,java,spinner,Java,Spinner,我在JavaSwing中使用过JavaSpinner,但它有上下箭头,有没有办法设置它的方向,使箭头向左和向右 多亏了让·弗朗索瓦·萨瓦德的回答,我又向前迈进了一步,但仍然不完全正确,我有以下几句话: public void installUI(JComponent c) { super.installUI(c); c.removeAll(); FlowLayout FL=new FlowLayout(); FL.setHgap(0); c.set
public void installUI(JComponent c)
{
super.installUI(c);
c.removeAll();
FlowLayout FL=new FlowLayout();
FL.setHgap(0);
c.setLayout(FL);
JComponent editor=createEditor();
editor.setPreferredSize(new Dimension(30,16));
c.add(editor);
c.add(createPreviousButton());
c.add(createNextButton());
}
间距不正确,如何修复?我在上面几行硬编码了,如何自动为文本提供适当的空间?在google上进行一个简短的搜索,让我找到了一个自定义的
JSpinner
实现
public class LeftRightSpinnerDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new LeftRightSpinnerDemo().makeUI();
}
});
}
public void makeUI() {
JSpinner spinner = new JSpinner();
spinner.setUI(new LeftRightSpinnerUI());
JFrame frame = new JFrame();
frame.add(spinner);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class LeftRightSpinnerUI extends BasicSpinnerUI {
public static ComponentUI createUI(JComponent c) {
return new LeftRightSpinnerUI();
}
@Override
protected Component createNextButton() {
Component c = createArrowButton(SwingConstants.EAST);
c.setName("Spinner.nextButton");
installNextButtonListeners(c);
return c;
}
@Override
protected Component createPreviousButton() {
Component c = createArrowButton(SwingConstants.WEST);
c.setName("Spinner.previousButton");
installPreviousButtonListeners(c);
return c;
}
// copied from BasicSpinnerUI
private Component createArrowButton(int direction) {
JButton b = new BasicArrowButton(direction);
Border buttonBorder = UIManager.getBorder("Spinner.arrowButtonBorder");
if (buttonBorder instanceof UIResource) {
b.setBorder(new CompoundBorder(buttonBorder, null));
} else {
b.setBorder(buttonBorder);
}
b.setInheritsPopupMenu(true);
return b;
}
@Override
public void installUI(JComponent c) {
super.installUI(c);
c.removeAll();
c.setLayout(new BorderLayout());
c.add(createNextButton(), BorderLayout.EAST);
c.add(createPreviousButton(), BorderLayout.WEST);
c.add(createEditor(), BorderLayout.CENTER);
}
}
确保在我删除它们时添加正确的import
s以减轻代码的负担
参考原始帖子。你能发布链接吗?太棒了,我可能会在我自己的项目中使用它:)很高兴听到它的帮助:)太好了,但我希望两个箭头在右侧,就像原始微调器一样,如下:[text<>]@Frank然后只需修改UI,我相信您可以通过查看
installUI
方法来了解:)