Ich versuche, die Border
eines JTextField
rot zu färben und dann später wieder auf "normal" zu ändern. Wenn ich Linux (Ubuntu) benutze, unterscheidet sich die ursprüngliche Border
von der Border
, die Sie mit UIManager.getBorder("TextField.border");
erhalten, von denen eine SynthBorder
ist und eine FieldBorder
ist. Der "richtige" wäre der SynthBorder
.JTextField - Rand auf Systemstandard zurücksetzen
SSCCE:
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Main
{
private static boolean switched;
public static void main(final String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame frame = new JFrame("Test border change");
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.LINE_AXIS));
JTextField tf = new JTextField();
JButton button = new JButton("Switch");
button.addActionListener(action ->
{
if (switched)
{
tf.setBorder(UIManager.getBorder("TextField.border"));
switched = !switched;
}
else
{
tf.setBorder(BorderFactory.createLineBorder(Color.RED));
switched = !switched;
}
});
frame.getContentPane().add(tf);
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Ich habe bereits versucht:
JComponent.updateUI()
(No Effect)- nulling die Grenze (Ruinen das Layout)
- Erhaltung es (keine richtige Verwendung Weg)
Hoffe, dass jemand eine bessere Idee hat.
Bezug auf Marcel
Mögliche Duplikate von [Zurücksetzen/entfernen Sie einen Rand in Swing] (http://StackOverflow.com/Questions/726808/Reset-Remove-A-Border-Ins-Swing) – Berger
Ich habe das schon versucht, funktioniert gut in das Beispiel, aber löst Ausnahmen im produktiven Anwendungsfall wegen der Vielseitigkeit aus. Ich denke aber weiter darüber nach. – ScriptKiddy
Ein Kommentar zu einer Antwort in dem obigen Link schlägt vor, 'setBorder (null)' aufzurufen, bevor 'updateUI() 'aufgerufen wird. – Berger