2
Я разрабатываю приложение с поворотным основанием с пользовательским дизайном. Одна из задач - настроить управление прядильщиком. Я хочу, чтобы достичь чего-то вроде этого:
Моя основная проблема заключается в том, что элементы управления Горячо перекрываются это граница:
код, который создает вертушка:
JSpinner с пользовательским интерфейсом
public class GolfSpinner extends JSpinner {
public GolfSpinner() {
setBorder(new LineBorder(new Color(Colors.INPUT_BORDER.getR()
, Colors.INPUT_BORDER.getG(), Colors.INPUT_BORDER.getB()), 1, true));
setEditor(new Editor(this));
setUI(new GolfSpinnerUI());
}
private class GolfSpinnerUI extends BasicSpinnerUI {
@Override
protected Component createPreviousButton() {
Component component = createButton(Icons.ARROW_DOWN.getUrl());
super.createPreviousButton();
if (component != null) {
installPreviousButtonListeners(component);
}
return component;
}
@Override
protected Component createNextButton() {
Component component = createButton(Icons.ARROW_UP.getUrl());
if (component != null) {
installNextButtonListeners(component);
}
return component;
}
private Component createButton(String url) {
BufferedImage icon = null;
try {
icon = ImageIO.read(new File(url));
} catch (IOException e) {
System.err.println(e.getMessage());
}
if (icon != null) {
JButton arrowButton = new JButton(new ImageIcon(icon));
arrowButton.setBackground(new Color(Colors.APP_PANEL_BACKGROUND.getR()
, Colors.APP_PANEL_BACKGROUND.getG(), Colors.APP_PANEL_BACKGROUND.getB()));
arrowButton.setBorderPainted(false);
arrowButton.setPreferredSize(new Dimension(icon.getWidth() + 15, icon.getHeight() + 5));
return arrowButton;
} else {
return null;
}
}
}
private class Editor extends JPanel implements ChangeListener {
private JLabel label = new JLabel();
private Editor(JSpinner spinner) {
setLayout(new FlowLayout(FlowLayout.LEADING));
label.setForeground(Color.BLACK);
setBackground(Color.WHITE);
setBorder(new EmptyBorder(5, 6, 5, 0));
add(label);
spinner.addChangeListener(this);
}
@Override
public void stateChanged(ChangeEvent e) {
JSpinner spinner = (JSpinner) e.getSource();
label.setText(spinner.getValue().toString());
}
}
}
Я попытался изменить предпочтительный размер блесны но это не помогает.
Спасибо вам за советы! Я проверю его, и если будет желательный дизайн - почтовый код. На данный момент я нашел временное решение, используя ** MatteBorder ** на кнопках со стрелками. Это не идеально, но лучше, чем ничего. –