为辅助回答,张贴以下我编写的简易计算器代码,回答问题可不看.import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SmpCountEquipment2 extends JFrame implements ActionListener {         private TextField Operation1,Operation2,End;
         private Button button1,button2,button3,button4;
         private Label label1,label2,label3;      SmpCountEquipment2(){
      super("简易计算器");
      setJLabelJTextFeild();
      setJLabelJTextFeild2();
      setLayout(new FlowLayout(FlowLayout.LEFT,5,5));
      }      public void setJLabelJTextFeild(){
            Container c=getContentPane();
            JPanel panel1=new JPanel();            label1=new Label("                            操作数");
            Operation1=new TextField(20);
            label2=new Label("                            操作数");
            Operation2=new TextField(20);
            label3=new Label("                            结果");
            End=new TextField(20);
            GridLayout g=new GridLayout(3,3,50,50);
            panel1.setLayout(g);
            panel1.add( label1);
            panel1.add(Operation1);
            panel1.add(label2);
            panel1.add(Operation2);
            panel1.add(label3);
            panel1.add( End);
            panel1.setSize(100,400);
            panel1.setBackground(Color.orange);
            c.add(panel1);
      }
       public void setJLabelJTextFeild2(){
        Container a=getContentPane();
         JPanel panel2=new JPanel();
       button1=new Button("+");
        button1.addActionListener(this);
        button1.setBounds(0,-78,100,30);
        button2=new Button("-");
        button2.addActionListener(this);
        button2.setBounds(0,-38,100,30);
        button3=new Button("*");
        button3.addActionListener(this);
        button3.setBounds(0,2,100,30);
        button4=new Button("/");
        button4.addActionListener(this);
        button4.setBounds(0,42,100,30);
        panel2.setLayout(null);
        panel2.add(button1);
        panel2.add(button2);
        panel2.add(button3);
        panel2.add(button4);
        a.add(panel2);
       }
       public void actionPerformed(ActionEvent e){           String n1=Operation1.getText();
           String n2=Operation2.getText();
           int k1 =Integer.parseInt(n1);
           int k2 =Integer.parseInt(n2);           if(e.getActionCommand().equals("+")){
               int k3=k1+k2;
               String k4=""+k3;
              End.setText(k4);
           }
          if(e.getActionCommand().equals("-")){
               int k5=k1-k2;
               String k51=""+k5;
              End.setText(k51);
           }
          if(e.getActionCommand().equals("*")){
                          int k6=k1*k2;
                          String k61=""+k6;
                         End.setText(k61);
           }
         if(e.getActionCommand().equals("/")){
                int k7=k1/k2;
               String k71=""+k7;
              End.setText(k71);
           }       }
      public static void main(String[] args){
        SmpCountEquipment2 jframe=new SmpCountEquipment2();
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setSize(510,220);
        jframe.setResizable(false);
        jframe.setVisible(true);
    }}
问题:<一>:不取消布局管理器,就不能设置组件大小和方向?(5分)
   <二>:在以上代码中我设置了2个面板,框架是FlowLayout布局,为什么2个面板会重合?(2个面板的颜色不一样,故知)(15分)
   <三>:如何在框架中添加音乐?具体结合代码说明.(40分)  再次补充:顶者有分!!!!初学者,感激不尽.

解决方案 »

  1.   

    private void playSound()
    {
    try
    {
    FileInputStream fileau = new FileInputStream(new File("filename.wav")); //filename.wav是带路径的.绝对或者相对  
    AudioStream as = new AudioStream(fileau);
    AudioPlayer.player.start(as);
    } catch (Exception e)
    {
    e.printStackTrace();
    }
    }
    ==================================
    AudioPlayer.player.stop(as);//關閉的時候停止播放
      

  2.   

    问题:<一>:不取消布局管理器,就不能设置组件大小和方向?(5分): Java提供了那么几种布局管理方式,但如果想随意更改组件的大小,方向,可以把布局设置为null,然后定义组件的绝对坐标来布局.   <二>:在以上代码中我设置了2个面板,框架是FlowLayout布局,为什么2个面板会重合?(2个面板的颜色不一样,故知)(15分): 这两个面板是紧贴着另一个的,看上去是重合了,可能会与实际有些出入,不过可以用其他的布局管理方式来解决这个问题.上面两个问题,可能通过几次的面板组合,其他的布局管理器通过复杂的处理来实现,不过setLayout(null)是最简单,但是当窗口大小变化时,会影响组件与窗口大小的不一致,一般用于窗口大小固定的情况下.   <三>:如何在框架中添加音乐?具体结合代码说明.(40分): 背景音乐要用重新建一个线程,用于播放背景音乐,这样,播放背景音乐的时候,并不影响你进行计算.播放有代码楼上的已经给出,把其加入一个线程即可.
      

  3.   

    AudioStream 在哪个包里啊 为什么我在api里查不到呢?
      

  4.   

    你的代码太长了,没看,不过要添加声音,这样就行了:AudioClip mySong=getAudioClip(getDocumentBase(),"Songs/song.au");
    mySong.play();AudioClip为java.applet中的一个接口;
      

  5.   

    《一》:不取消布局管理器,就不能设置组件大小和方向?
       答:可以用GridBagLayout类网格袋布局,它把窗体分成几份,每个组件可以占几列或者几行,这部分可以参考jdk文档。
    <二>:在以上代码中我设置了2个面板,框架是FlowLayout布局,为什么2个面板会重合?
    答:
    类 FlowLayout
    流布局用于安排有向流中的组件,这非常类似于段落中的文本行。
    说白了,就是一行接着一行,一行玩了,转到下行,这个重叠的问题可以通过调整窗口大小来调,不过这样不好,可以通过:
    用网格布局gridlayout类,再将
    panelMain= new JPanel(new GridLayout(2,1));//2行1列(主面板)
    this.setContentPanel(panelMain);
    panelMain.add(panel1);//将两个面板加入主面板中
    panelMain.add(panel1);《三》:如何在框架中添加音乐?具体结合代码说明.
    答:
    sound=getAudioClip(getCodeBase(),"voice.wav"); 
    sound.play();
    这些上面大虾们的说的很清楚了。使用线程是一个方法,也可以直接把它放在init()中,让它加在程序时直接运行,
    但建议用线程的方法,这是编程的好习惯。
      

  6.   

    sound=getAudioClip(getCodeBase(),"voice.wav"); 
    sound.play();
    这个是Applet里的,在Application中不能用.
      

  7.   

    要在Application中播放声音可用AudioStream.它在sun.audio包里,是个私有包,在API里查不到.
    还可用Player,它在javax.media包中,需要下载JMF.