Java 获取jtextfield以返回到透明状态
当我点击按钮时,我试图让Java 获取jtextfield以返回到透明状态,java,swing,jbutton,jtextfield,mouselistener,Java,Swing,Jbutton,Jtextfield,Mouselistener,当我点击按钮时,我试图让JTextField显示在JButton上。我有工作,但当我点击了按钮,它仍然保持可见。我正在使用一个MouseListener事件,因此一旦我退出按钮,我希望JTextField再次变得透明,但它保持可见 我的代码: import java.awt.EventQueue; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.JFrame; import
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);
}
}
使用
ActionListener
对按钮单击做出反应:如果收到单击,则使按钮不可见,文本字段可见
然后将
MouseListener
连接到文本字段,而不是按钮,并且仅实现mouseExit
(所有其他项均为空)。当您收到此事件时,使文本字段不可见,按钮再次可见 使用ActionListener
对按钮点击做出反应:如果收到点击,则使按钮不可见,文本字段可见
然后将
MouseListener
连接到文本字段,而不是按钮,并且仅实现mouseExit
(所有其他项均为空)。当您收到此事件时,使文本字段不可见,按钮再次可见 我建议为Jbutton
-JTextField
魔术设计一个CardLayout
(编辑:我实际上是在发布后才在评论中看到这些建议的,因为它是如此明显,而且是在一个答案上)。按下按钮将切换卡片,然后用鼠标退出文本字段区域将再次切换
正如您被告知的,不要使用
null
布局,也不要指定边界。使用合适的布局管理器为您完成此操作。我建议为Jbutton
-JTextField
魔术使用CardLayout
(编辑:我实际上是在发布后才在评论中看到建议的,因为它非常明显,而且有答案)。按下按钮将切换卡片,然后用鼠标退出文本字段区域将再次切换
正如您被告知的,不要使用
null
布局,也不要指定边界。使用适当的布局管理器为您执行此操作。“如果您收到一次单击,请使按钮不可见,文本字段可见。”如所示,非常适合使用。“然后连接鼠标侦听器…”。。喜欢使用键盘的用户呢?“似乎一个专注的聆听者在那里会更好。”安德烈·霍姆普森显然,OP正试图取得一些效果。当然,还有更有效的方法(例如CardLayout)。而且GUI不是很有用。但当你是一名学习者时,尝试这些东西仍然是有意义的。“但当你是一名学习者时,尝试这些东西仍然是有意义的。”对于新手来说,更好的学习是如何制作一个可用的GUI。这种胡说八道最好留给手头有太多时间的专家(即使这样,这通常也是一个坏主意——只是他们需要‘离开他们的系统’)。“如果你收到一个点击,让按钮不可见,文本字段可见。”非常适合使用,如中所示。“然后连接鼠标侦听器…”。。喜欢使用键盘的用户呢?“似乎一个专注的聆听者在那里会更好。”安德烈·霍姆普森显然,OP正试图取得一些效果。当然,还有更有效的方法(例如CardLayout)。而且GUI不是很有用。但当你是一名学习者时,尝试这些东西仍然是有意义的。“但当你是一名学习者时,尝试这些东西仍然是有意义的。”对于新手来说,更好的学习是如何制作一个可用的GUI。这种胡说八道最好留给手头有太多时间的专家(即使这样,这通常也是一个坏主意——这只是他们需要“走出系统”的东西)。Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。请改用布局管理器,或与布局填充和边框一起使用。尝试调用repaint
click out the button是什么意思?文本字段上的焦点不集中?在文本字段中提交文本?Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。请改用布局管理器,或与布局填充和边框一起使用。尝试调用repaint
click out the button是什么意思?文本字段上的焦点不集中?是否在文本字段中提交文本?
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);
}
}