0

我刚刚开始制作一个简单的 mp3 播放器,我正在创建播放、前进、后退等... 按钮,但由于某种原因,只有第一个按钮出现并且要使第二个按钮出现,我必须去滚动它. 如果你能帮我解决这个问题,那就太好了。我正在使用两张图片,一张名为 play.jpg,另一张名为 next.png。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Graphic extends JPanel{

JFrame f = new JFrame();
JPanel p = new JPanel(new GridBagLayout());

public Graphic(){

    gui();

}

public void gui(){

    f.setVisible(true);
    f.setSize(1600,900);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(p);

    ppr(75,26,25,25,"pics/play.jpg");
    //above is the play button


    ppr(40,26,25,25,"pics/next.png");
// above is the button that wont appear until it is scrolled over (it is just to the      left of the button above



}

public void ppr(int x, int y, int width, int height, String file){
    p.setLayout(null);      

    Toolkit tool = Toolkit.getDefaultToolkit();
        Image player = tool.getImage(file);
            ImageIcon playbutton = new ImageIcon(player);

    JButton play = new JButton(playbutton);
        play.setBounds(x, y, width, height);
            p.add(play);

    // ********************** above is the the method that makes a button        


}


public static void main(String args[]) {
    new Graphic();

}



  }
4

3 回答 3

1

setVisible(true)方法应该在所有组件都添加到 GUI 之后调用。

我也同意其他关于更好的 GUI 设计的建议。

于 2013-03-23T05:32:39.147 回答
1

在不同的线程中运行 GUI,而不是在主线程中。

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

所有 UI 代码都应该在 Swing 的事件调度线程中运行。

于 2013-03-23T05:22:37.513 回答
1

不要使用setBounds. 使用您在初始化面板时指定的GridBagLayout 并指定GridBagConstraints

于 2013-03-23T05:25:20.633 回答