gpt4 book ai didi

java - 获取一个 JTextField 返回透明状态

转载 作者:行者123 更新时间:2023-12-02 03:55:16 26 4
gpt4 key购买 nike

当我单击按钮时,我试图让 JTextField 显示在 JButton 上。我已经可以正常工作了,但是当我单击按钮时它仍然可见。我正在使用 MouseListener 事件,因此一旦退出按钮,我希望 JTextField 再次变得透明,但它仍然可见。

我的代码:

import java.awt.EventQueue;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseEvent;


public class magicalJtextField extends JFrame implements MouseListener{

private JPanel contentPane;
private JTextField textField;


public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
magicalJtextField frame = new magicalJtextField();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}


public magicalJtextField() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);


textField = new JTextField();
textField.setBounds(78, 78, 89, 30);
contentPane.add(textField);
textField.setColumns(10);

JButton button = new JButton("");
//button transparent
// button.setOpaque(false);
// button.setContentAreaFilled(false);
// button.setBorderPainted(false);
button.setBounds(78, 78, 89, 23);
button.addMouseListener(this);
contentPane.add(button);

textField.setVisible(false);

}
public void mouseEntered(MouseEvent e)
{
//button.setText("Mouse Entered");
//button.setBackground(Color.CYAN);
// textField.setVisible(true);
}

public void mouseExited(MouseEvent e)
{
textField.setVisible(false);
}
public void mouseClicked(MouseEvent e)
{
textField.setVisible(true);
}
public void mousePressed(MouseEvent e)
{
textField.setVisible(true);
}
public void mouseReleased(MouseEvent e)
{
textField.setVisible(true);
}
}

最佳答案

我建议使用 CardLayout 来实现 Jbutton-JTextField 魔术(编辑:我实际上是在发布后才在评论中看到建议的)因为它是如此明显并且有答案)。按下按钮将切换卡片,然后用鼠标退出文本字段区域将再次切换。

enter image description here

public class Example extends JPanel {

public static void main(String[] args) {

EventQueue.invokeLater(() -> {
JFrame frame = new JFrame();
frame.add(new Example());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
});
}

public Example() {

CardLayout cards = new CardLayout(5, 5);
JPanel panel = new JPanel(cards);

JButton button = new JButton("");
JTextField textField = new JTextField(10);

button.addActionListener(e -> {
cards.next(panel);
textField.requestFocusInWindow();
});

textField.addMouseListener(new MouseAdapter() {

@Override
public void mouseExited(MouseEvent e) {

cards.next(panel);
}
});

panel.add(button);
panel.add(textField);

add(panel);
}
}

正如Andrew Thompson告诉您的那样,不要使用 null 布局,也不指定边界。使用适当的布局管理器来为您完成此操作。

关于java - 获取一个 JTextField 返回透明状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546604/

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