JButton 不会显示另一个 jframe

Posted

技术标签:

【中文标题】JButton 不会显示另一个 jframe【英文标题】:JButton won't show another jframe 【发布时间】:2019-12-12 02:20:57 【问题描述】:

我目前正在处理一个项目,每当我单击 jframe 2(登录后的第二个 jframe)“设置约会”/btn1 上的 jbutton 时,它不会显示另一个 jframe,即 jframe3。 程序本身可以工作,但按钮不会显示另一个 jframe。

import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.Container;

public class me 
public static void main (String [] args) 
    JFrame jframe = new JFrame();
    jframe.setSize(450,350);
    jframe.getContentPane().setBackground(Color.WHITE);

    ImageIcon c = new ImageIcon("teethlogo5.png");
    JLabel bi = new JLabel("",c,JLabel.RIGHT);
    bi.setBounds(25,35,400,40);
    jframe.add(bi);

    ImageIcon a = new ImageIcon("teethlogo2.png");
    JLabel si = new JLabel("",a,JLabel.RIGHT);
    si.setBounds(50,90,100,120);
    jframe.add(si);


    JLabel jl1 = new JLabel("Username:");
    jl1.setBounds(190,100,100,50);
    jframe.add(jl1);

    JTextField uss = new JTextField();
    uss.setBounds(270,110,120,30);
    jframe.add(uss);

    JLabel jl2 = new JLabel("Password:");
    jl2.setBounds(190,150,100,50);
    jframe.add(jl2);

    JPasswordField pss = new JPasswordField();
    pss.setBounds(270,160,120,30);
    jframe.add(pss);

    JButton enter = new JButton("log in");
    enter.setBounds(250,210,100,40);
    jframe.add(enter);

    enter.addActionListener(new ActionListener()
        public void actionPerformed(ActionEvent e)
            String userText;
            String pwdText;
            userText = uss.getText();
            pwdText = String.valueOf(pss.getPassword());

            if (userText.equals("user") && pwdText.equals("pass")) 
                JOptionPane.showMessageDialog(null, "LoginSuccessful","Message",JOptionPane.PLAIN_MESSAGE);
                jframe.setVisible(false);
                JFrame jframe2 = new JFrame();
                jframe2.setSize(850,560);
                jframe2.getContentPane().setBackground(Color.WHITE);

                ImageIcon b = new ImageIcon("teethlogo4.png");
                JLabel sii = new JLabel("",b,JLabel.RIGHT);
                sii.setBounds(10,0,600,100);
                jframe2.add(sii);


                JButton btn1 = new JButton("Set an Appointment");
                btn1.setBounds(100,100,150,30);
                jframe2.add(btn1);

                JButton btn2 = new JButton("View Appointments");
                btn2.setBounds(270,100,150,30);
                jframe2.add(btn2);

                btn1.addActionListener(new ActionListener()
                    public void actionPerformed(ActionEvent e)
                        if (btn1.isSelected())
                            jframe2.setVisible(false);
                            JFrame jframe3 = new JFrame();
                            jframe3.setSize(850,560);
                            jframe3.getContentPane().setBackground(Color.WHITE);



                            jframe3.setLayout(null);
                            jframe3.setVisible(true);
                            jframe3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        
                    
                );

                jframe2.setLayout(null);
                jframe2.setVisible(true);
                jframe2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


             

            else  
                JOptionPane.showMessageDialog(null, "Invalid Username or Password","Message",JOptionPane.PLAIN_MESSAGE);
            uss.setText(null);
            pss.setText(null);
            
        
    );


    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jframe.setResizable(false);
    jframe.setLayout(null);
    jframe.setVisible(true);
    

我是java初学者,我很想知道如何解决这个问题。

【问题讨论】:

1) 请参阅The Use of Multiple JFrames, Good/Bad Practice? 2) jframe2.setLayout(null); Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同的语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。 【参考方案1】:

你正在用自己的脚射击自己:

if (btn1.isSelected())
    // ...

不需要这个代码块——一个按钮不会被“选中”,除非它从 JToggleButton(例如 JCheckBox)扩展而来并且已经被选中,这是 JButton 不允许的,还有更多,它阻止了它持​​有的侦听器的代码运行。解决方案:摆脱它。

【讨论】:

以上是关于JButton 不会显示另一个 jframe的主要内容,如果未能解决你的问题,请参考以下文章

在另一个 JFrame 中使用 JButton 刷新 JTable?

Java运行其他类的main方法,当JButton被按下时

当面板中的 JButton 悬停时,JPanel 上的 MouseExited 运行?

如何使jbutton动作以移动另一帧

单击 JButton 时不会填充 JTable

如何相对于另一个组件布局组件?