Java Jdatechooser Foreground



好日子

我正在尝试更改带内置jdatechooser 的框文本(jtextfile(的颜色

我正在开发一个jdatechooser的白色背景根本不匹配的应用程序,我用以下代码更改了jtextfile和jdatechoose的按钮的背景颜色:

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扩展了JFormatedTextField。因此,前景色是一个绑定属性,这意味着你可以监听对它的更改。因此,你可以添加一个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],绿色是自定义颜色[0150,0]。

最新更新