为了账号安全,请及时绑定邮箱和手机立即绑定

Java-Swing侦听表单文本字段中的动作

Java-Swing侦听表单文本字段中的动作

HUX布斯 2020-01-05 14:00:27
我想开发一个带有一些文本字段的表格。例:NameSecondName这个想法是,每个文本字段都在文本内部包含以下内容:Insert your nameInsert your second name当您单击第一个文本字段以输入您的姓名时,必须删除文本“插入您的姓名” ...第二个文本字段(SecondName)也必须如此。我认为我只需要在文本字段上执行一个操作,当用户在文本字段上按下鼠标时就必须唤醒它,这可能吗?
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

看看PromptSupport中的SwingLabs SwingX图书馆

当字段具有焦点时,“提示”将被隐藏,但是您可以控制它,直到用户键入某些内容或获得焦点时高亮显示它为止。


import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.Insets;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import org.jdesktop.swingx.prompt.BuddySupport;

import org.jdesktop.swingx.prompt.PromptSupport;


public class PromptSupportTest {


    public static void main(String[] args) {

        new PromptSupportTest();

    }


    public PromptSupportTest() {

        EventQueue.invokeLater(new Runnable() {

            @Override

            public void run() {

                try {

                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {

                    ex.printStackTrace();

                }


                JFrame frame = new JFrame("Testing");

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.add(new TestPane());

                frame.pack();

                frame.setLocationRelativeTo(null);

                frame.setVisible(true);

            }

        });

    }


    public class TestPane extends JPanel {


        public TestPane() {

            JTextField firstName = new JTextField(10);

            PromptSupport.setPrompt("First Name", firstName);

            PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.HIDE_PROMPT, firstName);


            JTextField lastName = new JTextField(10);

            PromptSupport.setPrompt("Last Name", lastName);

            PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.HIDE_PROMPT, lastName);


            JTextField picture = new JTextField(10);

            PromptSupport.setPrompt("Picture", picture);

            PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.HIDE_PROMPT, picture);


            JButton browse = new JButton("...");

            browse.setMargin(new Insets(0, 0, 0, 0));

            browse.setContentAreaFilled(false);

            browse.setFocusPainted(false);

            browse.setFocusable(false);

            browse.setOpaque(false);

            // Add action listener to brose button to show JFileChooser...


            BuddySupport.addRight(browse, picture);


            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();

            gbc.gridwidth = GridBagConstraints.REMAINDER;

            gbc.weightx = 1;


            add(firstName, gbc);

            add(lastName, gbc);

            add(picture, gbc);


            gbc.anchor = GridBagConstraints.CENTER;

            add(new JButton("Ok"), gbc);

        }


        @Override

        public Dimension getPreferredSize() {

            return new Dimension(200, 200);

        }


    }


}

我还添加了一个示例,BuddySupport该示例是同一API的一部分,该示例使您可以使用文本组件来“编排”另一个组件。在这里,我完成了经典的“文件浏览器”组合,但是我一直都在这样做“搜索”样式字段...



查看完整回答
反对 回复 2020-01-06
?
RISEBY

TA贡献1856条经验 获得超5个赞

查看“ 文本提示”,这是一个简单的解决方案,可让您控制何时显示/隐藏文本以及文本的字体/颜色。


它将与常规文本组件一起使用。以最简单的形式,您只需要多一行代码:


JTextField firstName = new JTextField(10);

TextPrompt tp = new TextPrompt("First Name", firstName);



查看完整回答
反对 回复 2020-01-06
  • 3 回答
  • 0 关注
  • 352 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信