jbutton在鼠标悬停之前不可见

4xrmg8kj  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(346)

我正在为我的项目创建一个gui。当第一次加载gui时,只有背景可见,所以按钮不可见,但是当鼠标移到它们上面时,它们是可见的。解决这个问题的方法是什么?

public class Home extends JFrame{
//New JPanel 
private JPanel home;

//Creating image url. You must be change url
ImageIcon icon = new ImageIcon("img//home1.jpeg");

//Home Class
public Home(){

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 960, 640);
    setTitle("LoneyTunes Crush");
    home = new JPanel();
    home.setBorder(new EmptyBorder(5, 5, 5, 5));
    home.setLayout(new BorderLayout(0, 0));
    setContentPane(home);

    getContentPane().setLayout(null);
    JLabel background = new JLabel(new ImageIcon("img//giphy."));
    getContentPane().add(background);
    background.setLayout(new FlowLayout());

        //Creating Buttons
    JButton play = new JButton("Play");
    play.setBounds(20, 20, 200, 30);
    JButton setting = new JButton("Settings");
    setting.setBounds(20, 60, 200, 30);
    JButton exit = new JButton("Exit");
    exit.setBounds(20, 100, 200, 30);
       //Adding Buttons
    home.add(play);
    home.add(setting);
    home.add(exit);

            //ActionListeners
    play.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
               home.setVisible(false);
               difficulty.setVisible(true);

            }

          });

    exit.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.exit(1);   

            }

          });

    validate();

}

//Background paint method
public void paint(Graphics g){

    g.drawImage(icon.getImage(), 0, 0, getWidth(), getHeight(), null);

}   

}

主要类别

public class MainClass {
public static Home pencere;

public static void main(String args[]){
    pencere=new Home();
    pencere.setVisible(true);
}

}

wooyq4lh

wooyq4lh1#

不要在像这样的顶级容器上作画 JFrame 因为他们已经承担了粉刷所有部件的重任。
而是在上面画画 JPanel 或者 JComponent 以及 Override 是的 paintComponent 方法。
在覆盖之上 paintComponent (或者在你的情况下) paint ),你也需要打电话 super.paintComponent (就你而言 super.paint )在方法内部(方法签名下的第一个调用),以防中断绘制链。如果不这样做,可能会给你留下不想要的油漆文物。
避免使用空布局有很多原因。不同的平台会对他们区别对待。除其他许多原因外,它们很难维护。相反,使用布局管理器,让它们来布局和调整组件的大小,就像设计swing应用程序时那样。了解有关在容器中布局组件的详细信息
设置 Home pancere 作为一个 static 班级成员 MainClass 完全没有意义。只需在 main 方法。
swing应用程序应该在事件调度线程(edt)上运行。可以通过将代码 Package 到 main 方法与 SwingUtilities.invokeLater... . 在初始线程中查看更多
与其尝试使面板可见或不可见,或者添加删除面板,不如考虑使用 CardLayout 它将“分层”面板,您可以使用 CardLayout 的方法,如 show() , next() , previous() . 有关如何使用cardlayout的更多信息
部署时,您使用的映像需要成为嵌入式资源,并且应该从类路径而不是从文件系统加载。当你把一根线传给 ImageIcon ,您告诉程序查看文件系统,它可能在您的开发环境中工作,但仅此而已。查看嵌入资源上的wiki标签密切关注最后一个链接,如果信息没有提供足够的详细信息,该链接将为您提供有关如何使用和加载嵌入资源的一些资源。

30byixjq

30byixjq2#

尝试放入validate();方法。我想这对你有帮助。

yhxst69z

yhxst69z3#

只需确保所有其他面板的setvisibility设置为false,除了您希望显示的面板。我也有类似的问题,但我忘记了将10个面板之一的visibility设置为false。一旦设置为false,问题就解决了。

q3qa4bjr

q3qa4bjr4#

问题在于

getContentPane().setLayout(null);

删除它,因为您已经将布局设置为边框布局,您将看到所有这些按钮。

相关问题