borde titulado jspinner siendo cortado

Entonces mi problema es, que he tenido antes con Jspinners. Es que rodeo mi jspinner con un borde titulado. Sin embargo, en la interfaz gráfica de usuario corta el texto del título porque el js es más pequeño. Entonces, ¿cómo puedo obligar a la interfaz gráfica de usuario a redimensionarse en función de la longitud del título, o cómo puedo hacer que el jspinner sea más largo, supongo, para proporcionar suficiente espacio para que quepa todo el título?

JTextField name= new JTextField(9);
name.setBorder(new TitledBorder("Name"));
//setup spinner date format
SimpleDateFormat datePattern = new SimpleDateFormat("MM/dd/yyyy");
JSpinner dob = new JSpinner(new SpinnerDateModel());
dob.setEditor(new JSpinner.DateEditor(dob, datePattern.toPattern()));
dob.setBorder(new TitledBorder("Date of Birth"));
JPanel childPanel = new JPanel();
childPanel.setLayout(new FlowLayout());
childPanel.add(name);
childPanel.add(dob);
childPanel.setBorder(new TitledBorder("Child Info"));

Entonces:

JPanel mainPanel = new JPanel(); 
mainPanel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));        
mainPanel.add(childPanel);
childPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
//there are more items in this panel, just omitted them, that's why using BoxLayout

preguntado el 12 de junio de 12 a las 16:06

Me he encontrado con este problema antes cuando el borde del título de un jspinner es incluso más largo que este ejemplo. También probé .setMaximumSize(object.getPreferredSize()); en el spinner, el childPanel y el mainPanel. Ninguno de los dos parece solucionar el problema. -

a) tal vez use Nimbus Look and Feel, en lugar de molestarse con XxxBorders, b) Sugeriría que solo en el caso de que nunca configure para Fondo o Primer plano, tenga en cuenta que debería ser tan difícil y complicado configurar ambos valores para Nimbus L&F:

1) Para obtener una mejor ayuda antes, publique un SSCCE. 2) Uno de los gurús del Swing maldice al TitledBorder - Tiene peculiaridades y problemas. -

1 Respuestas

Simplemente agregue el JSpinner a un JPanel y agregue el borde al panel:

    JPanel dobPanel = new JPanel();
    dobPanel.add(dob);
    dobPanel.setBorder(BorderFactory.createTitledBorder("Date of Birth"));

EDITAR: también tenga en cuenta que usar BorderFactory es mejor que crear instancias de Border:

Siempre que sea posible, esta fábrica entregará referencias a instancias de Border compartidas.

http://docs.oracle.com/javase/7/docs/api/javax/swing/BorderFactory.html

Respondido el 12 de junio de 12 a las 17:06

Gracias por el consejo para usar borderfactory :). Y gracias, tu solución funcionó, ¿¡por qué no se me ocurrió!?!?! - loboblancopgh

+1 Como referencia, "le recomendamos que coloque el componente en un JPanel y poner el borde en el JPanel"-setBorder(). - basurero

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.