GUI 简单提问 顶者有分.
为辅助回答,张贴以下我编写的简易计算器代码,回答问题可不看.
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分)
再次补充:顶者有分!!!!
初学者,感激不尽.
[解决办法]
ding
[解决办法]
只能看着别人拿分,自己解决不了呀,学习
[解决办法]
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);//的候停止播放
------解决方案--------------------
UP
[解决办法]
问题:<一>:不取消布局管理器,就不能设置组件大小和方向?(5分): Java提供了那么几种布局管理方式,但如果想随意更改组件的大小,方向,可以把布局设置为null,然后定义组件的绝对坐标来布局.
<二>:在以上代码中我设置了2个面板,框架是FlowLayout布局,为什么2个面板会重合?(2个面板的颜色不一样,故知)(15分): 这两个面板是紧贴着另一个的,看上去是重合了,可能会与实际有些出入,不过可以用其他的布局管理方式来解决这个问题.
上面两个问题,可能通过几次的面板组合,其他的布局管理器通过复杂的处理来实现,不过setLayout(null)是最简单,但是当窗口大小变化时,会影响组件与窗口大小的不一致,一般用于窗口大小固定的情况下.
<三>:如何在框架中添加音乐?具体结合代码说明.(40分): 背景音乐要用重新建一个线程,用于播放背景音乐,这样,播放背景音乐的时候,并不影响你进行计算.播放有代码楼上的已经给出,把其加入一个线程即可.
[解决办法]
ding
[解决办法]
学习一下
[解决办法]
AudioStream 在哪个包里啊 为什么我在api里查不到呢?
[解决办法]
你的代码太长了,没看,不过要添加声音,这样就行了:
AudioClip mySong=getAudioClip(getDocumentBase(), "Songs/song.au ");
mySong.play();
AudioClip为java.applet中的一个接口;
[解决办法]
学习了。。。
[解决办法]
学习一下呀~~
[解决办法]
顶下
[解决办法]
《一》:不取消布局管理器,就不能设置组件大小和方向?
答:可以用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()中,让它加在程序时直接运行,
但建议用线程的方法,这是编程的好习惯。
[解决办法]
sound=getAudioClip(getCodeBase(), "voice.wav ");
sound.play();
这个是Applet里的,在Application中不能用.
[解决办法]
要在Application中播放声音可用AudioStream.它在sun.audio包里,是个私有包,在API里查不到.
还可用Player,它在javax.media包中,需要下载JMF.