Wenn ich das Fenster, meine benutzerdefinierte JTextField Größe ändert die Größe neu. Es tut dies nur einmal, das erste Mal, wenn ich die Größe des Fensters ändere. Es ist innen paintComponent
zu dieser Linie bezogen werden:Java Swing JTextField setMargin unerwartetes Verhalten
setMargin(new Insets(2, 25, 2, 2));
diesen Befehl Ausführen nicht das Textfeld vergrößert werden, bis ich die Größe des Fensters. Nach der Größenänderung des Fensters führt die Ausführung dieses Befehls dazu, dass JTextField größer wird. Die tatsächliche Größe des Fensters spielt keine Rolle. Die erste Zeitfenstergröße wird geändert, JTextField wird größer und bleibt dann bis zum Ende der Zeit groß. Ich würde es vorziehen, wenn das Feld groß wäre, sobald ich das Programm starte, und natürlich möchte ich nicht, dass es zufällig die Größe ändert.
Wie kann ich die Größe dieses JTextField beheben, so dass es nicht zufällig ändert?
Hier ist die ganze Klasse:
/**
* From https://gmigdos.wordpress.com/2010/03/30/java-a-custom-jtextfield-for-searching/
* @author Georgios Migdos <[email protected]> */
public class JIconTextField extends JTextField {
private Icon icon;
private Insets dummyInsets;
public JIconTextField(int columns) throws IOException {
super(columns);
Border border = UIManager.getBorder("TextField.border");
JTextField dummy = new JTextField();
this.dummyInsets = border.getBorderInsets(dummy);
String path = "find-16x16.png";
InputStream is = Main.class.getClassLoader().getResourceAsStream(path);
setIcon(new ImageIcon(ImageIO.read(is)));
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int textX = 2;
if(this.icon!=null){
int iconWidth = icon.getIconWidth();
int iconHeight = icon.getIconHeight();
int x = dummyInsets.left + 5;//this is our icon's x
textX = x+iconWidth+2; //this is the x where text should start
int y = (this.getHeight() - iconHeight)/2;
icon.paintIcon(this, g, x, y);
}
setMargin(new Insets(2, textX, 2, 2));
}
}
Warum setzen Sie Ränder innerhalb einer paintComponent-Methode? Das ist sehr ungewöhnlich und sieht sehr skizzenhaft aus. –
Quelle des Codes ist in der URL in OP. Ich weiß nicht, warum er es so gemacht hat. Ich bin darauf gestoßen, als ich gegoogelt habe, wie man ein Symbol über ein Textfeld zeichnet. –
Also was ** genau ** versuchst du zu erreichen? Was ist Ihr gewünschtes Codeverhalten im Gegensatz zu Ihrem beobachteten Codeverhalten? –