Swing JTextField comment supprimer la frontière?

y a-t-il de toute façon pour enlever une bordure dans un JTextField ?

txt = new JTextField();
txt.setBorder(null);   // <-- this has no effect.

je voudrais vraiment qu'il ressemble à un JLabel - mais j'ai encore besoin qu'il soit un JTextField parce que je veux que les gens soient en mesure de mettre en évidence.

20
demandé sur Tom Hawtin - tackline 2010-02-17 18:30:20

6 réponses

tiré d'une réponse à votre précédente question vous savez que certains LP&F peuvent nuire à la frontière.

la solution évidente consiste donc à outrepasser la méthode setBorder que le PL&f appelle, et à rejeter le changement.

JTextField text = new JTextField() {
    @Override public void setBorder(Border border) {
        // No!
    }
};
17
répondu Tom Hawtin - tackline 2017-05-23 12:18:22
JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());

http://java.sun.com/javase/6/docs/api/javax/swing/BorderFactory.html

lorsque vous définissez la bordure à 'null', vous dites en fait au look & feel d'utiliser le style de bordure natif (du système d'exploitation) s'il y en a une.

56
répondu Björn 2010-02-17 15:34:32

essayez de le régler sur BorderFactory.createEmptyBorder() au lieu de null. Parfois cela "fait le tour" parce que le réglage à null a en fait une signification différente.

si cela ne fonctionne pas, il est possible que le regard et le sentiment que vous utilisez l'emporte sur quelque chose. Utilisez-vous la valeur par défaut ou quelque chose de personnalisé?

3
répondu Uri 2010-02-17 15:56:32

Non, vous ne pouvez pas enlever la frontière. Surtout sur l'affichage des composants AWT. Ils utilisent le jeu de widget natif (sont dessinés en dehors de Java).

essayez de faire la ligne qui est similaire à votre arrière-plan... par exemple, si votre fond est blanc, alors vous devez:

setBorder(BorderFactory.createLineBorder(Color.white));

puis régler le fond sur blanc:

setBackground(Color.white);
2
répondu stuklist 2012-11-13 17:26:36
txt.setBorder(new LineBorder(Color.BLACK,0));

pourrait marcher.

1
répondu gerardw 2013-02-03 13:18:39

le seul moyen de le faire fonctionner en toutes circonstances est le réglage suivant:

setBorder (BorderFactory.createLineBorder (new Color (0, 0, 0, 0), 2));

sinon (quand vous avez le fond nul du conteneur parent) vous verrez le curseur "I" rester pour toujours au bord gauche de votre JTextField. (Il suffit de faire quelques tests pour différentes épaisseurs de bordure et d'observer de façon assez étrange la JTextField place le curseur lorsque vous l'activez pour la première fois.)

Alternativement, vous pouvez définir:

setBorder (BorderFactory.createLineBorder (getBackground (), 2));

mais vous obtiendrez le champ optically plus grand de 2 pixels dans les quatre directions. Si vous ne spécifiez pas l'épaisseur de la bordure, vous verrez le curseur entre cette bordure et le champ restant à jamais.

-1
répondu Tomek 2012-03-11 06:33:06