小编Aid*_*dan的帖子

使用图像和提示装饰JTextField

我正在尝试用图像和提示创建一些看起来更漂亮的JTextFields.为此,我做了一个覆盖paintComponent方法的装饰器.我使用装饰器的原因是我想将它应用于其他类型的JTextField,例如JPasswordField.

这是我到目前为止所做的;

在此输入图像描述

左边的表格中看到的问题是,即使我使用了JPasswordField,paintComponent也似乎忽略了我所假设的密码paintComponent,它可能是密码屏蔽符号.

所以问题是,如何避免重复JTextFields和JPasswordFields的代码,但仍然具有不同的功能,如密码屏蔽.

这是装饰器代码;

public class JTextFieldHint extends JTextField implements FocusListener{
private JTextField jtf;
private Icon icon;
private String hint;
private Insets dummyInsets;

public JTextFieldHint(JTextField jtf, String icon, String hint){
    this.jtf = jtf;
    setIcon(createImageIcon("icons/"+icon+".png",icon));
    this.hint = hint;

    Border border = UIManager.getBorder("TextField.border");
    JTextField dummy = new JTextField();
    this.dummyInsets = border.getBorderInsets(dummy);

    addFocusListener(this);
}

public void setIcon(Icon newIcon){
    this.icon = newIcon;
}

@Override
protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        int textX = 2;

        if(this.icon!=null){
            int iconWidth = icon.getIconWidth();
            int iconHeight = icon.getIconHeight(); …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing decorator jtextfield

9
推荐指数
2
解决办法
1万
查看次数

在另一个任务之前异步运行grunt任务

我有一个gruntfile设置,以便我可以开发我的本地angularjs前端,同时将所有api请求转发到在网络上单独托管的java中间层.

这很好用,除了服务器的位置每隔几天更改一次,我必须不断更新gruntfile和最新的服务器位置.

最新的服务器位置可以通过URL缩短服务找到,该服务转发到正确的位置,因此我可以使用这个grunt task/node.js代码获取它:

grunt.registerTask('setProxyHost', 'Pings the url shortener to get the latest test server', function() {
    request('http://urlshortener/devserver', function(error, response, body) {
        if (!error) {
            var loc = response.request.uri.href;
            if (loc.slice(0, 7) === 'http://') {
                proxyHost = loc.slice(7, loc.length - 1);
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

当然这是异步的,当我运行它时,grunt已经在请求完成时设置了代理.

如何同步运行此nodejs请求或阻止grunt直到它完成?这只是为了开发,所以欢迎hacky解决方案.

谢谢

编辑:

伟大的答案Cory,这已经解决了这个问题,因为grunt现在等待任务完成才能继续.最后一个问题是我无法从initConfig访问该配置来设置代理,因为initConfig首先运行:

module.exports = function(grunt) {
[...]
    grunt.initConfig({
        connect: {
            proxies: [{
                host: grunt.config.get('proxyHost')
Run Code Online (Sandbox Code Playgroud)

这篇文章(initConfig()中的Access Grunt配置数据)概述了这个问题,但我不确定如何在任务之外同步运行请求?

EDIT2 [已解决]:

Corys回答+这篇文章以编程方式将参数传递给grunt任务?为我解决了这个问题.

module.exports = function(grunt) {
[...]
    grunt.initConfig({
        connect: {
           proxies: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js gruntjs

9
推荐指数
1
解决办法
929
查看次数