에서 작동하지 않는 스윙. 자바 내가 자바 스윙에서 제대로 작동 표준 <code>BorderFactory.createEmptyBorder</code>을 얻을 수 오른쪽 테두리는 마이크로 소프트 윈도우
나는 스피너보기를 만들고 주위에 빈 상태 (empty)의 경계를 선언하는 간단한 자바 응용 프로그램과 함께 그것을 시도. 경계는 스피너보기의 오른쪽을 제외하고는 어디에서나 표시됩니다. 하지만 그것은 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);
}
}
편집 : 나는 또 하나 개의 UI 요소를 구현하는 해결책을 찾기 위해 싶지 않아요. 이것은 쉽고 간단한 솔루션이 될 것입니다 (Andrew Thompson에게 감사드립니다). 그 이유는 그것이 내가이 오류에 빠진 작은 프로젝트 일 뿐이 기 때문입니다. 소규모 프로젝트에서 나는 대체로 깔끔하고 훌륭한 코드를 원합니다. 즉, 버그는 해결 된 코드가 아닌 해결 방법으로 해결됩니다. JSpinner가 사용자 정의 레이아웃 매니저를 사용하고 올바르게 국경을 처리하지 않는 것 같습니다 사전
Windows 버전은 무엇입니까? –
이 코드는 "fenster"라는 변수를 선언하지 않습니다 (아마도 JFrame?) – FredK
죄송합니다. 사용되지 않은 댓글을 삭제하는 동안 실수로 삭제했습니다. –