聚合全网技术文章,根据你的阅读喜好进行个性推荐
这个怎么制作 有点绕不过来
你好,自己的作业自己写
java swing 或者现在交java flex了
啊这...
Java Swing其实很强大.
但同时swing也是一个怪兽, 在训服怪兽之前, 你更多时候是憎恶它.
swing的两大难题:
1. 谜一样的布局组件和布局行为, 与传统WEB上的div布局差异巨大. 其实原因也很简单, 二者的编程理念不同: swing是命令式的, 可定制任何细节(不过代价是: 陡峭的学习路径+大量编码), web的div是声明式的, 就像SQL语言一样, 只能使用它已提供的有限特性, 为外观和行为指定属性, 但绝大多数情况下, 这就够用了, 而且开发效率高, 代码量很少. 性能可能差点.
2. 业务代码与UI组件代码混杂一起. 这是个很麻烦的事, 如果你的项目比较大. 那就更糟糕了. 当前流行的MVVM双相绑定模式很好的解决了这个问题. 但很不幸, swing很古老, 它是变种的MVC模式. 因此, 如果有效地组织和隔离业务代码与UI组件代码, 将会是一大挑战
import java.awt.GridLayout; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JTextArea; import javax.swing.JLabel; import java.awt.Graphics; import javax.swing.JButton; import javax.swing.JOptionPane; public class Ca extends JFrame implements ActionListener { private JPanel calJPanel; // 装载按钮的面板 private JButton buttons[]; //按钮数组 private JTextField textField1, textField2; //输入双精度数据的文本框 private final int N = 4; //四则运算,四个按钮 private JLabel label1 = new JLabel("数 1 = "); private JLabel lavel2 = new JLabel("数 2 = "); String symbol[]={"+","-","*","/"}; // 运算符数组 public void actionPerformed(ActionEvent e){ for (int i=0;i<N;i++) if (e.getSource() == buttons[i]){ double d1 = Double.parseDouble(textField1.getText()); double d2 = Double.parseDouble(textField2.getText()); double result; if(i==0) result = d1 + d2; else if(i==1) result = d1 - d2; else if (i==2) result = d1 * d2; else result = d1/d2; String s = Double.toString(d1) + symbol[i] + Double.toString(d2) + " = " + Double.toString(result); System.out.println(s); JOptionPane.showMessageDialog(null, s ,"运算结果",2); continue; } } public Ca(){ super( "简单计算器" ); //标题栏的字符串居中 JLabel title = new JLabel("简单计算器", JLabel.CENTER); Font f = new Font("宋体",Font.BOLD,36); //设置字体 title.setFont(f); title.setForeground(Color.blue); // 设置标题的颜色 add(new JPanel().add(title), BorderLayout.NORTH); JPanel centerPanel = new JPanel(); centerPanel.setLayout(null); JLabel num1 = new JLabel("数 1 = "); num1.setBounds(70,30,100,10); centerPanel.add(num1); textField1 = new JTextField(); textField1.setBounds(140,20,150,30); centerPanel.add(textField1); JLabel num2 = new JLabel("数 2 = "); num2.setBounds(70,100,100,40); centerPanel.add(num2); textField2 = new JTextField(); textField2.setBounds(140,100,150,30); centerPanel.add(textField2); add(centerPanel, BorderLayout.CENTER); buttons = new JButton[N]; calJPanel = new JPanel(); // set up panel calJPanel.setLayout( new GridLayout( 2, buttons.length+2, 5,10 ) ); calJPanel.add(new JLabel(" ")); String symbol[]={"加","减","乘","除"}; for ( int count = 0; count < buttons.length; count++ ) { buttons[ count ] = new JButton( symbol[count] ); buttons[ count ].addActionListener(this); calJPanel.add( buttons[ count ] ); // add button to panel } // end for calJPanel.add(new JLabel()); for(int i=0;i<7;i++) calJPanel.add(new JLabel()); add( calJPanel, BorderLayout.SOUTH ); // add panel to JFrame setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(450,300); setVisible(true); } public static void main( String args[] ){ new Ca(); } // end main } // end class Ca
使用java布局管理器的说明:
无论是边界 Border-,还是网格 Grid- 布局管理器Layout,其分区面板里 (如 EAST,WEST,SOUTH, NORTH, CENTER, 或每个网格)的组件(如 标签 JLabel,文本框 JTextField, 按钮 JButton 等 ), 都要被 “拉伸”, 即充满给定的面板。在这种场合下,调用组件的 setPreferredSize(Dimension preferredSize) 方法是无济于事的,。比如,要缩小文本框(或按钮) 的尺寸,用上述方法就不可能奏效。只能使用其它手段:
目前的做法是:
总的布局采用 东西南北中边界布局管理器 BorderLayout。
北区 BorderLayout.NORTH 只显示一个名称”简单计算器”,设置一个 标签JLabel即可。调用它自身的方法,就可以搞定字体尺寸、颜色、位置等。
中区 BorderLayout.CENTER 若采用 GridLayout, 两个文本框会被”拉伸”,无法搞定给定的宽和高。 所以,放弃现成的布局管理器,使用 手段 2 (自定义的办法 setBounds(int x, int y, int w, int h)。
当然,最直接的办法是自定义各种组件的位置和宽高, 即调用组件的方法 setBounds(int x, int y, int w, int h), 逐个搞定每个组件的位置和尺寸。这样可以避免使用各种布局管理器的短板。
import javax.swing.*; import java.awt.*; public class Calculator extends JFrame{ JTextField f[] = new JTextField[2]; JButton bt[] = new JButton[4]; public Calculator(){ super("简单计算器"); setLayout(null); JLabel title = new JLabel("简单计算器"); title.setFont(new Font("黑体",Font.BOLD,30)); title.setBounds(120,50,300,50); add(title); String name [] = {"加","减","乘","除"}; for(int i=0;i<4;i++){ bt[i] = new JButton(name[i]); bt[i].setFont(new Font("黑体",Font.BOLD,16)); add(bt[i]); bt[i].setBounds((50 + 80*i), 200 , 60, 30); }; for(int i=0;i<2;i++){ JLabel j = new JLabel("数" + (i+1)); j.setBounds(60, 120+ i*40, 50,30); j.setFont(new Font("黑体",Font.BOLD,16)); add(j); f[i] = new JTextField(); f[i].setBounds(160, 120+ i*40, 150,30); add(f[i]); }; DrawPanel drawpanel = new DrawPanel(); drawpanel.setBounds(0,0,420,340); add(drawpanel); //添加坐标网格 setSize(420, 340); setVisible(true); } public static void main(String args[]){ new Calculator(); } } class DrawPanel extends JPanel{ // 画坐标系网格的面板类 public void paintComponent(Graphics g){ super.paintComponent(g); /* 画坐标线 */ for (int i=0;i<=30;i++){ if (i%10 == 0) g.setColor(Color.red); else g.setColor(Color.blue); g.drawLine(0,10*i, 400, 10*i); } for (int i=0;i<=40;i++){ if (i%10 == 0) g.setColor(Color.red); else g.setColor(Color.blue); g.drawLine(10*i,0, 10*i, 300); } } }
注意:组件一定要在类 Calculator 定义中的构造方法中搞定, 不得通过 画板类 DrawPanel 的 paint Component(Graphics g) 搞定。因为,画板类中的 paintComponen(Graphics g) 方法, 是专门为画笔 g 画图而设计的,这个方法有时,如创建动画,可以重复多次调用。
其实,不用 import javax.swing.*; 就能完成任务。
import java.awt.*; import java.awt.event.*; public class Cal extends Frame{ TextField f[] = new TextField[2]; Button bt[] = new Button[4]; public Cal(){ super("简单计算器"); setLayout(null); Label title = new Label("简单计算器"); title.setFont(new Font("黑体",Font.BOLD,30)); title.setBounds(120,50,300,50); add(title); String name [] = {"加","减","乘","除"}; for(int i=0;i<4;i++){ bt[i] = new Button(name[i]); bt[i].setFont(new Font("黑体",Font.BOLD,16)); add(bt[i]); bt[i].setBounds((50 + 80*i), 200 , 60, 30); }; for(int i=0;i<2;i++){ Label j = new Label("数" + (i+1)); j.setBounds(60, 120+ i*40, 50,30); j.setFont(new Font("黑体",Font.BOLD,16)); add(j); f[i] = new TextField(); f[i].setBounds(160, 120+ i*40, 150,30); add(f[i]); }; addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); setSize(420, 340); setVisible(true); } public static void main(String args[]){ new Cal(); } }
你好,自己的作业自己写
java swing 或者现在交java flex了
啊这...
Java Swing其实很强大.
但同时swing也是一个怪兽, 在训服怪兽之前, 你更多时候是憎恶它.
swing的两大难题:
1. 谜一样的布局组件和布局行为, 与传统WEB上的div布局差异巨大. 其实原因也很简单, 二者的编程理念不同: swing是命令式的, 可定制任何细节(不过代价是: 陡峭的学习路径+大量编码), web的div是声明式的, 就像SQL语言一样, 只能使用它已提供的有限特性, 为外观和行为指定属性, 但绝大多数情况下, 这就够用了, 而且开发效率高, 代码量很少. 性能可能差点.
2. 业务代码与UI组件代码混杂一起. 这是个很麻烦的事, 如果你的项目比较大. 那就更糟糕了. 当前流行的MVVM双相绑定模式很好的解决了这个问题. 但很不幸, swing很古老, 它是变种的MVC模式. 因此, 如果有效地组织和隔离业务代码与UI组件代码, 将会是一大挑战
使用java布局管理器的说明:
无论是边界 Border-,还是网格 Grid- 布局管理器Layout,其分区面板里 (如 EAST,WEST,SOUTH, NORTH, CENTER, 或每个网格)的组件(如 标签 JLabel,文本框 JTextField, 按钮 JButton 等 ), 都要被 “拉伸”, 即充满给定的面板。在这种场合下,调用组件的 setPreferredSize(Dimension preferredSize) 方法是无济于事的,。比如,要缩小文本框(或按钮) 的尺寸,用上述方法就不可能奏效。只能使用其它手段:
目前的做法是:
总的布局采用 东西南北中边界布局管理器 BorderLayout。
北区 BorderLayout.NORTH 只显示一个名称”简单计算器”,设置一个 标签JLabel即可。调用它自身的方法,就可以搞定字体尺寸、颜色、位置等。
中区 BorderLayout.CENTER 若采用 GridLayout, 两个文本框会被”拉伸”,无法搞定给定的宽和高。 所以,放弃现成的布局管理器,使用 手段 2 (自定义的办法 setBounds(int x, int y, int w, int h)。
当然,最直接的办法是自定义各种组件的位置和宽高, 即调用组件的方法 setBounds(int x, int y, int w, int h), 逐个搞定每个组件的位置和尺寸。这样可以避免使用各种布局管理器的短板。
注意:组件一定要在类 Calculator 定义中的构造方法中搞定, 不得通过 画板类 DrawPanel 的 paint Component(Graphics g) 搞定。因为,画板类中的 paintComponen(Graphics g) 方法, 是专门为画笔 g 画图而设计的,这个方法有时,如创建动画,可以重复多次调用。
其实,不用 import javax.swing.*; 就能完成任务。