如何在JTextField内嵌入JButton并确保输入后按钮不消失?
要实现按钮嵌入文本框且始终可见,你需要调整组件层级和文本框内边距,具体修改如下:
核心修改点
- 将按钮添加到JTextField内部(而非contentPane),利用JTextField作为容器的特性
- 调整文本框右侧内边距,避免输入文本被按钮遮挡
- 修正按钮的坐标为相对于文本框的位置
修改后的完整代码
license = new JTextField(); license.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { String licenseField = license.getText(); if(licenseField.isBlank() || licenseField.isEmpty()) { license.setText("Enter your license key"); license.setForeground(Color.GRAY); } } }); license.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { String licenseField = license.getText(); if(licenseField.equals("Enter your license key")) { license.setText(""); license.setForeground(new Color(240, 185, 11)); } } }); license.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { license.setFocusable(true); } }); license.setFocusable(false); license.setBorder(null); Border lineBorder = BorderFactory.createLineBorder(new Color(240, 185, 11), 1); // 调整右侧内边距,给按钮留出足够空间(按钮宽度109 + 6px间距) Border padding = BorderFactory.createEmptyBorder(0, 7, 0, 115); license.setBorder(BorderFactory.createCompoundBorder(lineBorder, padding)); license.setText("Enter your license key"); license.setForeground(Color.GRAY); license.setBackground(Color.BLACK); license.setFont(new Font("Tahoma", Font.PLAIN, 12)); license.setBounds(115, 248, 370, 60); contentPane.add(license); license.setColumns(10); JButton connect = new JButton("Connect"); connect.setFocusPainted(false); connect.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); connect.setBorder(null); connect.setFont(new Font("SansSerif", Font.BOLD, 12)); connect.setForeground(Color.BLACK); connect.setBackground(new Color(240, 185, 11)); // 调整按钮坐标为相对于文本框的位置(右侧对齐,上下居中) connect.setBounds(256, 7, 109, 46); // 将按钮添加到文本框内部,而非contentPane license.add(connect);
关键说明
- 组件层级调整:把按钮添加到
license(JTextField)中,这样按钮会作为文本框的子组件,随文本框移动且始终显示在其内部 - 内边距设置:右侧内边设为115px,确保输入的文本不会延伸到按钮区域
- 按钮位置:通过
setBounds(256,7,109,46)让按钮在文本框内右侧对齐,上下留出7px间距保持居中 - 可见性保障:按钮作为文本框的子组件,不会因文本框的焦点状态或内容变化而消失,始终保持可见
内容的提问来源于stack exchange,提问作者user17191335
相关产品推荐
相关产品推荐

