我已经写了一个代码,显示图像幻灯片现在我想在它上面放一个按钮我该怎么办?

时间:2017-02-25 17:09:26

标签: jframe

我已经通过设置setComponentZOrder()来尝试此代码,但它也没有用,请给我一些建议如何实现这个目标来制作图像幻灯片并在jframe上放一个按钮

import java.awt.Image;
import java.awt.*;
import java.awt.event.ActionListener;
import javafx.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.*;

public class slidemain extends JFrame {

    JLabel jl;
    JButton b;
    Timer tm;
    int x = 0;
    int w;
    int h;
    String[] list = {
        "C:\\Users\\HARITI\\Desktop\\sat.jpg",
        "C:\\Users\\HARITI\\Desktop\\mtab.jpg",
        "C:\\Users\\HARITI\\Desktop\\abc.jpg"
    };

    public slidemain()
    {
        super("java slide show");
        // w = super.getWidth();
        // h = super.getHeight();

        jl = new JLabel();
        b = new JButton();
        //b.setVisible(true);
        super.setComponentZOrder(jl, 0);
        super.setComponentZOrder(b, 1);
        jl.setBounds(0, 100, 1350, 650);
        setImageSize(2);

        tm = new Timer(1500, new ActionListener(){
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
            setImageSize(x);
            x += 1;
            if (x >= list.length)
            {
                x = 0;
            }
        }
        });
        add(jl);
        tm.start();
        setLayout(null);

        getContentPane().setBackground(Color.decode("#bdb67b"));
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void setImageSize(int i) {

        ImageIcon icon = new ImageIcon(list[i]);
        Image img = icon.getImage();
        Image newimg = img.getScaledInstance(jl.getWidth(), jl.getHeight(), Image.SCALE_SMOOTH);
        ImageIcon newimc = new ImageIcon(newimg);
        jl.setIcon(newimc);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        // TODO code application logic here
        new slidemain();
    }
}

1 个答案:

答案 0 :(得分:1)

此...

super.setComponentZOrder(jl, 0);
super.setComponentZOrder(b, 1);
如果尚未将任何组件添加到容器中,

将不会有任何影响。

这将我们带到您的下一个问题,您实际上从未将按钮添加到任何内容

如果您这样做了,则不会显示,因为您正在使用null布局

避免使用null布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的结束,您将花费越来越多的时间来纠正。

或许可以查看Why is it frowned upon to use a null layout in SWING?了解更多详情