gpt4 book ai didi

java swing DatePicker 使用 JTextField 做错了并且想要更改

转载 作者:行者123 更新时间:2023-12-02 08:03:05 25 4
gpt4 key购买 nike

我最初构建了一个 DatePicker。一旦用户单击 JtextField,日历对话框就会在 JTextField 旁边打开。如果一个人想要键入日期而不是选择日期,那么他必须首先关闭打开的对话框,然后键入日期。

它的外观如下:

public class DateTextField extends JTextField implements Observer {

public void update(Observable o, Object arg) {
Calendar calendar = (Calendar) arg;
DatePicker dp = (DatePicker) o;
setText(dp.formatDate(calendar));
}

public DateTextField() {
final Observer obs = this;
final JTextField tf = this;
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if(tf.isEditable()){
DatePicker dp = new DatePicker(obs);
Date selectedDate = dp.parseDate(tf.getText());
dp.setSelectedDate(selectedDate);
dp.start(tf);
}
}
});
}

我没有显示 DatePicker 类,因为这不是这里的问题。问题是,每次输入日期时都要关闭日历对话框,这非常令人恼火。相反,我想做的是在 JtextField 一侧保留一个按钮,只有当用户单击该按钮时才会弹出对话框。

但要做到这一点,我需要 DatePicker 来扩展 JPanel 类,并且我可以并排布局 JTextfield 和 JButton。但不幸的是,DatePicker 类扩展了 JtextField,并且在我的应用程序中,我期望 DatePicker 是一个 JtextField。在此 DatePicker 上有从 JComponent 到 JTextfield 的强制转换以及对 get 和 setText() 的调用。

如果我必须更改 DatePicker 以扩展 JPanel,那么它会破坏我的应用程序。我想知道是否可以通过绘画或其他方式来装饰 JTextfield 以显示侧面的按钮?这可能吗?

最佳答案

我想,您应该重写 paintComponent 方法并稍微更改 MouseListener 。像这样的事情:

    protected void paintComponent(Graphics g) {  
super.paintComponent(g);
int y = (getHeight() - image.getHeight())/2;
g.drawImage(image, x, y, this);
}

并以某种方式跟踪 MouseListener 中事件的 e.getX() e.getY() 坐标。

关于java swing DatePicker 使用 JTextField 做错了并且想要更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com