我是Java新手,我正在创建一个简单的GUI。我在JFrame
中有一个Java标签,当我点击它时,程序应该显示另一个框架并隐藏当前框架。我也打印它来检查标签(它的作用就像一个按钮)是否有效。它第一次完成不工作。它适用于从第二次点击开始的下一次尝试,但不隐藏当前帧。
我的代码是:
private void jLabel4MouseClicked(java.awt.event.MouseEvent evt) {
MainFrame mf = new MainFrame();
jLabel4.addMouseListener(new MouseAdapter (){
@Override
public void mousePressed(MouseEvent e){
System.out.println("It works.");
mf.setVisible(true);
NewJFrame2 n2 = new NewJFrame2();
n2.setVisible(false);
}
});
是否有人知道如何修复它以便从第一次点击开始工作并隐藏当前帧?
答案 0 :(得分:6)
而不是点击JLabel
为什么不创建JButton
已经使用ActionListener
处理点击并使其看起来像JLabel
,如多个答案中所示在this question。
但它不会隐藏当前的JFrame
嗯,你需要在你的听众上调用JFrame#dispose()
方法,但也请看看The Use of Multiple JFrames: Good or Bad Practice?,最好使用Card Layout或者看看教程在How to use Dialogs
答案 1 :(得分:0)
使用n2.dispose()
代替n2.setVisible(false);
这是一个简单的例子,但正如其他人所说,同一个应用程序中的多个JFrame
并不好。而不是使用适当的布局尝试一个JFrame
和JPanel
。
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main {
JFrame MainFrame;
JFrame ChildFrame;
JLabel label;
public Main(){
MainFrame = new JFrame("Example");
MainFrame.setSize(300, 300);
label = new JLabel("Click me");
labelMousePressed();
MainFrame.add(label);
MainFrame.setVisible(true);
}
private void labelMousePressed() {
label.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
System.out.println("It works.");
MainFrame.dispose();
ChildFrame = new JFrame("Child");
ChildFrame.setSize(300, 300);
ChildFrame.setVisible(true);
}
});
}
public static void main(String[] args) {
Main m = new Main();
}
}
<强>更新强>
如果您没有覆盖JFrame
中的方法,则无需extends
(继承)JFrame
类。而不是从JFrame
创建一个对象并使用它。阅读此question to learn more about this。
答案 2 :(得分:0)
Java标签无法接收ActionListener事件,您应该使用按钮替换标签。你没有点击你点击按钮的标签,标签可能起作用的可能是属性改变听众。
运行并分析此代码,它将明确指导您...祝你好运,你选择了世界上最好的语言,我是一个java家伙
class MainFrame extends JFrame {
JButton button2 = new JButton("Go to Frame 2");
public MainFrame() {
setSize(500, 500);
getContentPane().setBackground(Color.RED);
setLayout(new FlowLayout());
add(button2);
button2.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*
* @param e
*/
@Override
public void mouseClicked(MouseEvent e) {
setVisible(false);
new Sample2().setVisible(true);
}
});
}}
public class Sample2 extends JFrame {
JButton button4;
public Sample2() {
setSize(500, 600);
setLayout(new FlowLayout());
getContentPane().setBackground(Color.YELLOW);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainFrame mf = new MainFrame();
button4 = new JButton("Button 4");
add(button4);
button4.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*
* @param e
*/
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("It works.");
mf.setVisible(true);
setVisible(false);
}
});
}
public static void main(String[] args) {
Sample2 sample2 = new Sample2();
sample2.setVisible(true);
}}
答案 3 :(得分:0)
Java标签无法接收ActionListener事件,您应该使用按钮替换标签。你没有点击你点击按钮的标签,标签可能起作用的可能是属性改变听众。
在这个答案中,按钮有图像,只记得创建一个文件夹unser src name res res然后添加按钮显示的图像。您可以使用
中的文件名替换图像文件名//new ImageIcon(getClass().getResource("/res/image-file_name"));**
package StackOverflowProblemSets;
import sun.applet.Main;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Created by HACKER on 05/06/2017.
* https://stackoverflow.com/questions/44370545/mouselistener-doesnt-work-
the-first-time-and-there-are-other-errors
*/
class MainFrame extends JFrame {
JButton button2 = new JButton("Go to Frame 2", new
ImageIcon(getClass().getResource("/res/ic_action_maps_blue.png")));
public MainFrame() {
setSize(500, 500);
getContentPane().setBackground(Color.RED);
setLayout(new FlowLayout());
add(button2);
button2.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*
* @param e
*/
@Override
public void mouseClicked(MouseEvent e) {
setVisible(false);
new Sample2().setVisible(true);
}
});}}
public class Sample2 extends JFrame {
JButton button4;
public Sample2() {
setSize(500, 600);
setLayout(new FlowLayout());
getContentPane().setBackground(Color.YELLOW);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainFrame mf = new MainFrame();
button4 = new JButton("Button 4", new
ImageIcon(getClass().getResource("/res/ic_action_alpha_icon_D.png")));
add(button4);
button4.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*
* @param e
*/
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("It works.");
mf.setVisible(true);
setVisible(false);
}
});
}
public static void main(String[] args) {
Sample2 sample2 = new Sample2();
sample2.setVisible(true);
}}