我正在尝试着色为JTextField
红色的Border
,然后稍后将其更改回“正常”。当我使用Linux(另外Ubuntu)时,最初的Border
与Border
不同,你使用UIManager.getBorder("TextField.border");
得到的其中之一是SynthBorder
,另一个是FieldBorder
。 “正确的”将是SynthBorder
。JTextField - 将边框重置为系统默认值
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);
}
}
我已经尝试:用
JComponent.updateUI()
(无效果)- 归零边界(遗址的布局)
- 保留它(不正确的方式)
希望任何人有更好的主意。
认为马塞尔
可能重复[重置/删除边框在Swing](http://stackoverflow.com/questions/726808/reset-remove-a-border-in-swing) – Berger
我已经尝试过,工作正常该示例,但由于事件而在生产用例中抛出异常。尽管如此,我可能会仔细考虑一下。 – ScriptKiddy
对上述链接中的答案的一个评论建议在调用'updateUI()'之前调用'setBorder(null)'。 – Berger