在Frame中,加入TextField与Panel后,在Panel中加入计算器的Button.
搞死我了..做不出来,不要见笑^_^...
//简易计算器的控制面板 0分...
import java.awt.*;
public class dialog{
private Frame f;
private TextField tf;
private Panel pan;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12;
public dialog(String title) {
f = new Frame(title);
tf= new TextField();
pan = new Panel();
b1 = new Button("1");
b2 = new Button("2");
b3 = new Button("3");
b4 = new Button("4");
b5 = new Button("5");
b6 = new Button("6");
b7 = new Button("7");
b8 = new Button("8");
b9 = new Button("9");
b10 = new Button("10");
b11 = new Button("11");
b12 = new Button("12");
}
public void launchFrame() {
f.setSize( 255,255);
f.setBackground( Color.blue);
f.setLayout( new FlowLayout( )) ;
f.add(tf);
tf.setSize(100,100);
tf.setBackground(Color.white);
f.add(b1) ;
f.add(b2);
f.add(b3) ;
f.add(b4);
f.add(b5) ;
f.add(b6);
f.add(b7) ;
f.add(b8);
f.add(b9) ;
f.add(b10);
f.add(b11) ;
f.add(b12);
f.pack();
f.setLayout(null); // 取消默认的布局管理器
pan.setSize(255,50);
pan.setBackground(Color.yellow);
f.add(pan);
f.setVisible( true);
}
public static void main( String args[]) {
dialog guiWin = new dialog("计算器");
guiWin.launchFrame();
}
}
界面有了,增加按钮事件处理,再处理逻辑了。
找本书看看源吗
给你帖一个,这个时核心技术里的一个源码,看书是最好的学习之路。
例子最好做又源码的,并且泡论坛对学习帮助不大,对提高倒是有点作用
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator
{
public static void main(String[] args)
{
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
/**
A frame with a calculator panel.
*/
class CalculatorFrame extends JFrame
{
public CalculatorFrame()
{
setTitle("Calculator");
setSize(WIDTH, HEIGHT);
Container contentPane = getContentPane();
CalculatorPanel panel = new CalculatorPanel();
contentPane.add(panel);
}
public static final int WIDTH = 200;
public static final int HEIGHT = 200;
}
/**
A panel with calculator buttons and a result display.
*/
class CalculatorPanel extends JPanel
{
public CalculatorPanel()
{
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true;
// add the display
display = new JTextField("0");
display.setEditable(false);
add(display, BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
// add the buttons in a 4 x 4 grid
panel = new JPanel();
panel.setLayout(new GridLayout(4, 4));
addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command);
addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command);
addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command);
addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command);
add(panel, BorderLayout.CENTER);
}
/**
Adds a button to the center panel.
@param label the button label
@param listener the button listener
*/
private void addButton(String label, ActionListener listener)
{
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
/**
This action inserts the button action string to the
end of the display text.
*/
private class InsertAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input = event.getActionCommand();
if (start)
{
display.setText("");
start = false;
}
display.setText(display.getText() + input);
}
}
/**
This action executes the command that the button
action string denotes.
*/
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
String command = evt.getActionCommand();
if (start)
{
if (command.equals("-"))
{
display.setText(command);
start = false;
}
else
lastCommand = command;
}
else
{
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
/**
Carries out the pending calculation.
@param x the value to be accumulated with the prior result.
*/
public void calculate(double x)
{
if (lastCommand.equals("+")) result += x;
else if (lastCommand.equals("-")) result -= x;
else if (lastCommand.equals("*")) result *= x;
else if (lastCommand.equals("/")) result /= x;
else if (lastCommand.equals("=")) result = x;
display.setText("" + result);
}
private JTextField display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
}
hi.3xp (kk):
看了一下你的源程序,有几个问题:
1.类名首字母应该大写,dialog应为Dialog,否则编译器就不会放过你;
2.pan是用来干什么的,不清楚。Panel用来布局界面,整体布局可以采用Frame的缺省布局管理器BorderLayout,分为上、下两部分,分别用panel来填充,上面的panel可以放一个textfield,占大部分空间的下面的panel可以放数字button,采用TGridLayout;
3.采用布局管理器时,控件大小是由布局管理器来控制的,所起setSize不会起作用。
用IDE不利于对awt,swing 的理解。
建议用记事本