Problema de personalización de JTextField
He creado un marco y colocado un botón y un campo de texto en él. Estoy usando el método setMargin
para establecer un margen entre el cursor y el borde del campo de texto y funciona perfectamente bien hasta que agrego un borde a él.
Después de agregar el borde, el método de llamada setMargin
no funciona.
¿Podrías ayudarme a entender el origen del problema y encontrar una alternativa para tener tanto un borde como un margen determinado?
public class main extends JFrame {
public static void main(String[] args) {
JTextField textfield0;
JButton button0;
Border border7 = BorderFactory.createDashedBorder(new Color(0xA524FF), 2, 5, 4, true);
Border border8 = BorderFactory.createCompoundBorder();
Border border01 = BorderFactory.createLineBorder(Color.RED);
Border border02 = BorderFactory.createLineBorder(Color.YELLOW);
Border border9 = BorderFactory.createCompoundBorder(border01, border02);
textfield0 = new JTextField();
textfield0.setPreferredSize(new Dimension(300, 30));
textfield0.setFont(new Font("Consolas", Font.BOLD, 15));
textfield0.setCaretColor(Color.RED);
textfield0.setBackground(Color.CYAN);
textfield0.setForeground(Color.MAGENTA);
textfield0.setText("nombre");
//textfield0.setBorder(border9);
textfield0.setSelectedTextColor(Color.YELLOW);
textfield0.setMargin(new Insets(0, 7, 0, 5));
textfield0.setCaretPosition(0);
textfield0.setSelectionColor(Color.PINK);
button0 = new JButton();
button0.setText("enviar");
button0.setPreferredSize(new Dimension(100, 30));
button0.setFocusable(false);
button0.setBackground(textfield0.getBackground());
button0.setFont(textfield0.getFont());
button0.setBorder(textfield0.getBorder());
JFrame frame00 = new JFrame();
frame00.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame00.setLayout(new FlowLayout());
frame00.add(button0);
frame00.add(textfield0);
frame00.pack();
frame00.setVisible(true);
}
}
davy.ai
El problema con el método
setMargin
que no funciona después de agregar un borde al campo de texto se debe al hecho de que el borde en sí tiene su propio padding/margin que está sobrescribiendo el margen establecido por el métodosetMargin
.Para tener tanto un borde como un margen específico, puedes usar un
CompoundBorder
para combinar el borde deseado con unEmptyBorder
que tenga el margen deseado. Por ejemplo, reemplaza la línea//textfield0.setBorder(border9);
con lo siguiente:Esto crea un borde compuesto con el borde de guiones deseado
border7
y un borde vacío con el margen deseado de 7 píxeles en el lado izquierdo y 5 píxeles en el lado derecho.Con este cambio, deberías poder tener tanto el borde como el margen deseado en el campo de texto.