![](/img/trans.png)
[英]How should I drag a JLabel from one JPanel in a JFrame onto a JTextField in another JPanel in the same JFrame?
[英]how to call JFrame when I put the mouse on JLabel And how to close the Same JFrame When i remove the mouse from JLabel?
在我的程序中,当我将鼠标放在JLabel
上时,我尝试显示JFrame
当我从JLabel
删除鼠标时,我尝试关闭JFrame
。
我该怎么做?
我尝试下面的方法,但是我不断地刷新窗口(弹出并不断关闭)
public class NewJFrame extends javax.swing.JFrame {
NewJFrame1 frame = new NewJFrame1();
public NewJFrame() {
initComponents();
}
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
//======================================================================
jLabel1.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent e)
{
frame.setVisible(true);
}
});
jLabel1.addMouseListener(new MouseAdapter()
{
public void mouseExited(MouseEvent e)
{
frame.setVisible(false); //Hide window
}
});
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Testing ");
//======================================================================
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
public javax.swing.JLabel jLabel1;
}
在这些行之间//============
我有主要代码
将鼠标放在JLabel
上时如何显示JFrame
,以及从JLabel
删除鼠标时如何关闭JFrame
?
当我删除下面的代码时,以及将鼠标放在JLabel
时,我都会看到JFrame
弹出窗口,但是当我从JLabel
删除鼠标时,我需要关闭JFrame弹出窗口。
jLabel1.addMouseListener(new MouseAdapter()
{
public void mouseExited(MouseEvent e)
{
frame.setVisible(false); //Hide window
}
});
您需要将JLabel(以及其他组件)添加到JFrame。 完成此操作后,JLabel将显示在JFrame中,您可以使用JLabel的侦听器。
编辑:
A.这是您的代码,仅作了一些最小的更改以显示/隐藏第二个JFrame:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class NewJFrame extends javax.swing.JFrame {
javax.swing.JFrame frame ;
//this will not compile and not needed
//NewJFrame1 frame = new NewJFrame1();
public NewJFrame() {
initComponents();
}
private void initComponents() {
frame = getAJFrame();
//set a layout manger
getContentPane().setLayout(new GridLayout(3, 1));
setLocationRelativeTo(null);
jLabel1 = new javax.swing.JLabel();
//add component
getContentPane().add(jLabel1);
JTextField jTextField1 = new javax.swing.JTextField();
//add component
getContentPane().add(jTextField1);
JButton jButton1 = new javax.swing.JButton();
//add component
getContentPane().add(jButton1);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.addMouseListener(new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent e)
{
frame.setVisible(true);
frame.pack();
}
});
jLabel1.addMouseListener(new MouseAdapter()
{
@Override
public void mouseExited(MouseEvent e)
{
frame.setVisible(false); //Hide window
}
});
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Testing ");
//set a size to the frame
setPreferredSize(new Dimension(200,100));
pack();
}
/**
*@return
*/
private JFrame getAJFrame() {
JFrame f = new JFrame("A JFrame");
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
f.getContentPane().setPreferredSize(new Dimension(150,150));
f.getContentPane().setBackground(Color.BLUE);
setVisible(false);
pack();
return f;
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
NewJFrame frame = new NewJFrame();
frame.setVisible(true);
}
});
}
public javax.swing.JLabel jLabel1;
}
B. 如果您试图显示/隐藏NewJFrame本身 :您将无法使用mouseEntered使JFrame再次可见。 将JFrame(及其中的JLabel)设置为setVisible(false)时,将不会生成鼠标事件。 当鼠标退出JLabel时,该框架变为不可见。 您将需要使用其他技术再次使其可见。
C.请参阅使用多个JFrame:良好或不良做法?
这是main方法的代码:
public static void main(String[] args) { EventQueue.invokeLater(() -> { Main ex = new Main(); ex.setVisible(true); }); }
然后使用以下命令将组件添加到面板中:
JPanel panel = new JPanel(); this.add(panel); JLabel jLabel1 = new JLabel("Label"); JTextField jTextField1 = new JTextField("Field"); JButton jButton1 = new JButton("Button"); panel.add(jLabel1); panel.add(jTextField1); panel.add(jButton1);
然后创建新的启动JFrame并设置当前的JFrame。 由于您的主类扩展了JFrame,因此可以使用关键字this
。
JFrame frame = new JFrame(); frame.setSize(300, 200); frame.setVisible(false); this.setTitle("Title"); this.setSize(300, 200); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE);
最后,让听众从您的代码中完成这项工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.