Я не могу получить стандарт BorderFactory.createEmptyBorder
, работающий правильно в Java Swing.Прямая граница Java Swing не работает в Microsoft Windows
Я попробовал это с помощью простого Java-приложения, которое создает Spinner View и объявляет пустую рамку вокруг него. Граница отображается везде, за исключением правой стороны витрины. но это произошло только в Windows, на OSX он работает по назначению.
Чтобы уточнить использование границы: в моем реальном приложении у меня есть видимая граница снаружи счетчика, а затем я хочу центрировать текст внутри. Я нашел, что свойство createCompoundBorder
очень полезно для этого.
import javax.swing.*;
import java.awt.*;
import javax.swing.border.Border;
class HelloWorldSwing {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
Runnable guiCreator = new Runnable() {
public void run() {
JFrame fenster = new JFrame("Hallo Welt mit Swing");
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SpinnerNumberModel model = new SpinnerNumberModel(1,1,9,1);
JSpinner spinner = new JSpinner(model);
JFormattedTextField textField = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
textField.setOpaque(true);
// textField.setBackground(Color.);
spinner.setBorder(BorderFactory.createEmptyBorder(50, 100, 50, 100));
spinner.setUI(new javax.swing.plaf.basic.BasicSpinnerUI() {
protected Component createNextButton() {
Component c = new JButton();
c.setPreferredSize(new Dimension(0, 0));
c.setFocusable(false);
return c;
}
protected Component createPreviousButton() {
Component c = new JButton();
c.setPreferredSize(new Dimension(0, 0));
c.setFocusable(false);
return c;
}
});
spinner.setBackground(Color.LIGHT_GRAY);
fenster.add(spinner);
fenster.setSize(300, 200);
fenster.setVisible(true);
}
};
SwingUtilities.invokeLater(guiCreator);
}
}
EDIT: Я не хочу, чтобы найти решение, которое реализует еще один элемент пользовательского интерфейса. Это было бы простым и простым решением (спасибо Эндрю Томпсону). Причина в том, что это всего лишь небольшой проект, где я попал в эту ошибку. В небольших проектах мне в основном нужен чистый и красивый код, а это значит, что такие ошибки исправлены, пытаясь исправить сломанный код, а не путем обхода.
Заранее спасибо
Какая версия Windows? –
Этот код никогда не объявляет переменную с именем «fenster». (Предположительно, JFrame?) – FredK
извините. Случайно удалил его, удалив некоторые неиспользованные комментарии. –