java - Java Jdatechooser 前台
问题描述
再会
我正在尝试更改带来内置 jdatechooser 的框文本(jtextfile)的颜色
我正在开发一个应用程序,其中 jdatechooser 的白色背景根本不匹配,我使用以下代码更改了 jtextfile 和 jdatechooser 按钮的背景颜色:
for( Component c : jdate.getComponents()){
((JComponent)c).setBackground(new Color(20,25,34));
}
我目前的问题是我需要的背景颜色很暗,日期文本是黑色的,目前在图像中有一个选定的日期,你什么都看不到。
我试图将文本更改为白色但没有成功。
尝试相同的方法而没有得到解决方案
for( Component text : jdate.getComponents()){
((JComponent)text).setForeground(new Color(255,255,255));
}
我还尝试删除我在开始时为背景放置的代码,认为这可能会阻止文本颜色的变化,但它也不起作用。
尝试以下其他方法来获得更改:
JTextFieldDateEditor dateChooserEditor = ((JTextFieldDateEditor)jdate.getDateEditor());
dateChooserEditor.setForeground(new Color(255, 255, 255));
当然,简单的方法也不起作用:
jdate.setForeground(Color.WHITE);
我设法更改文本颜色的唯一方法是禁用文本字段并启用按钮以选择按钮的日期,并且不能将其写入文本框中。
jdate.getDateEditor().setEnabled(false);
((JTextFieldDateEditor) jdate.getDateEditor ())
.setDisabledTextColor(Color.WHITE);
问题在于,除了不允许手动写入日期外,我还丢失了所需的背景颜色。
对此有任何解决方案吗?最好不必禁用文本框。
提前致谢!。
解决方案
我提出以下解决方案。
类JTextFieldDateEditor
扩展JFormattedTextField。因此前景色是一个绑定属性,这意味着你可以监听它的变化。因此,您可以添加一个PropertyChangeListener。如果新的前景色为黑色,只需将其更改为白色。
这是一个演示的小应用程序。
import com.toedter.calendar.IDateEditor;
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JTextFieldDateEditor;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class JdcTest0 implements Runnable {
private JFrame frame;
private JDateChooser jdate;
@Override
public void run() {
showGui();
}
private JPanel createDateChooser() {
JPanel panel = new JPanel();
jdate = new JDateChooser();
IDateEditor dateEditor = jdate.getDateEditor();
if (dateEditor instanceof JTextFieldDateEditor) {
JTextFieldDateEditor txtFld = (JTextFieldDateEditor) dateEditor;
txtFld.setBackground(Color.BLACK);
txtFld.addPropertyChangeListener("foreground", event -> {
if (Color.BLACK.equals(event.getNewValue())) {
txtFld.setForeground(Color.WHITE);
}
});
}
panel.add(jdate);
return panel;
}
private void showGui() {
frame = new JFrame("JDC");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(createDateChooser(), BorderLayout.PAGE_START);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new JdcTest0());
}
}
请注意,JTextFieldDateEditor
如果日期无效,则类将其前景色更改为红色,如果日期有效,则将其前景色更改为绿色。如果您也想处理这些颜色,那么红色是java.awt.Color#red,即 [255, 0, 0] 而绿色是自定义颜色 [0, 150, 0]。
推荐阅读
- python - 为什么 Python 会产生这个奇怪的广播错误?
- vb.net - 如何将 C# 对象转换转换为 VB.net 对象转换?(显示的特定转换方法)
- javascript - Express 错误:根据 HTML 规范对模块脚本强制执行严格的 MIME 类型检查
- c++ - 读取字符后无法输入整数
- python - 如何在 python 的 selenium 中进行网页抓取时单击链接?
- audio - 在 sweetalert 弹出窗口中实现声音
- python - Tensorflow 决策森林自定义指标与树的数量
- php - 如何在 PHP 中按字母顺序对 SplObjectStorage 集进行排序?
- javascript - 在选择第一个文件后激活另一个文件选择
- string - 根据第二个字符串在第一个字符串中查找唯一字符,并且在java中应该没有重复