首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Jdatechooser前台

Java Jdatechooser前台
EN

Stack Overflow用户
提问于 2020-11-20 08:55:30
回答 1查看 541关注 0票数 0

,good,

我正在尝试更改框文本(jtextfile)的颜色,这会带来内置的jdatechooser。

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

代码语言:javascript
复制
for( Component c : jdate.getComponents()){
        ((JComponent)c).setBackground(new Color(20,25,34)); 
        }

因此

我目前的问题是,我需要的背景颜色是非常深,日期文本是黑色的,目前在图像中有一个选定的日期,你只是看不到任何东西。

我试图将文本改为白色,但没有成功。

在没有得到解决方案的情况下尝试相同的方法

代码语言:javascript
复制
for( Component text : jdate.getComponents()){
        ((JComponent)text).setForeground(new Color(255,255,255)); 
        }

我还试着删除我在背景中放置的代码,认为这样可以防止文本颜色的改变,但它也不起作用。

尝试以下其他方法来获得更改:

代码语言:javascript
复制
JTextFieldDateEditor dateChooserEditor = ((JTextFieldDateEditor)jdate.getDateEditor());
        
         dateChooserEditor.setForeground(new Color(255, 255, 255));

当然,简单的方法也是行不通的:

jdate.setForeground(Color.WHITE);

更改文本颜色的唯一方法是禁用文本字段并保留启用按钮以选择按钮的日期,并且不能将其写入文本框中。

代码语言:javascript
复制
jdate.getDateEditor().setEnabled(false);
         
         ((JTextFieldDateEditor) jdate.getDateEditor ())
            .setDisabledTextColor(Color.WHITE);

这个问题,除了不允许手动写日期外,我还失去了想要的背景色。

如图所示

有解决方案吗?,最好不用禁用文本框。

提前谢谢!.

EN

回答 1

Stack Overflow用户

发布于 2020-11-20 12:48:49

我提出以下解决办法。

JTextFieldDateEditor扩展了JFormattedTextField。因此,前景颜色是一个绑定属性,这意味着您可以侦听对它的更改。因此,可以添加一个PropertyChangeListener。如果新的前景颜色为黑色,只需将其更改为白色即可。

下面是一个演示的小应用程序。

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64926458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档