• 【Java基础系列】第14章 Java图形编程


    有两种

    一:swing包内的图形界面类;二:awt包内图形界面类

    14.1 swing包

    14.1.1 窗口JFrame类

    JFrame类就是窗口类,所有的面板JPanel、按钮JButton、文本JTextArea、标签JLabel等等都可以对象.add()进该JFrame类对象中;也可以通过extends JFrame来使当前类成为窗口,通过this.add()加入到窗口。两者都需要.setVisible(true)来设置可视。另外,还需要setLayout()设置JFrame布局,哪怕是设置null都可以。

    1. //窗口关闭监听
    2. jf.addWindowListener(new WindowAdapter() {
    3. public void windowClosing(WindowEvent e) {
    4. System.exit(0);
    5. }
    6. });

    14.1.2 面板JPanel类

    JPanel面板类,所有的面板JPanel、按钮JButton、文本JTextArea、标签JLabel等等都可以对象.add()进该JPanel类对象中,然后通过将整个面板add进JFrame中。另外,还需要设置JFrame布局,哪怕是设置null都可以。

    14.1.3 按钮JButton类

    1. //两个按钮,一个提交,一个重置
    2. JButton submit = new JButton("提交");
    3. JButton reset = new JButton("重置");
    4. //设置按钮的(x,y,width,height)
    5. submit.setBounds(60, 120, 50, 30);
    6. reset.setBounds(150, 120, 50, 30);
    7. //提交按钮submit事件
    8. submit.addActionListener(new ActionListener() {
    9. @Override
    10. public void actionPerformed(ActionEvent e) {
    11. //判断账号密码正确与否都弹出相应的 提示框
    12. if( user.getText().equals(USERNAME) && pass.getText().equals(PASSWORD)){
    13. JOptionPane.showMessageDialog(jf, "登录成功");
    14. }else{
    15. JOptionPane.showMessageDialog(jf, "登录失败,请重新登录");
    16. }
    17. }
    18. });
    19. //重置按钮reset事件
    20. reset.addActionListener(new ActionListener() {
    21. @Override
    22. public void actionPerformed(ActionEvent e) {
    23. user.setText("");
    24. pass.setText("");
    25. }
    26. });
    27. jf.add(submit);//将两个按钮直接加入JFrame中
    28. jf.add(reset);

    14.1.4 文本框JTextField 与文本域JTextArea

    (1)文本框JTextField

    1. //两个文本框
    2. JTextField user = new JTextField();
    3. JTextField pass = new JTextField();
    4. //设置按钮的(x,y,width,height)
    5. user.setBounds(60, 50, 150, 30);
    6. pass.setBounds(60, 80, 150, 30);
    7. //将两个文本框直接加入JFrame中
    8. jf.add(user);
    9. jf.add(pass);

    (2)文本域JTextArea

    1. //显示面板组件
    2. JTextArea displayJTA = new JTextArea( 20, 30 );
    3. //JTextArea 加入滚动组件
    4. JScrollPane displayJSP = new JScrollPane(displayJTA);
    5. ScrollBar displayBar = displayJSP.getVerticalScrollBar();//获取滚动条;
    6. //将组件装入显示面板
    7. displayJTA.setEditable(false);//设置只读
    8. displayJTA.setLineWrap(true); //设置JTextArea中文本自动换行
    9. displayJSP.doLayout();
    10. displayJP.setLayout(new BorderLayout());
    11. displayJP.add(displayJSP);
    12. //不断将滚动条移动到最下
    13. displayBar.setValue(displayBar.getMaximum());

    14.1.5 标签JLabel类

    1. //两个标签
    2. JLabel userLabel = new JLabel("user:");
    3. JLabel passLabel = new JLabel("pass:");
    4. //设置按钮的(x,y,width,height)
    5. userLabel.setBounds(20, 53, 35, 20);
    6. passLabel.setBounds(20, 83, 35, 20);
    7. jf.add(userLabel);
    8. jf.add(passLabel);

    14.1.6 菜单栏JMenuBar、菜单JMenu、菜单选项JMenuItem

    1. //创建菜单栏
    2. JMenuBar mb = new JMenuBar();
    3. //创建菜单
    4. JMenu mn= new JMenu("文件(F)");
    5. //创建菜单选项,加入多个菜单选项
    6. JMenuItem[] mt = new JMenuItem[]{
    7. new JMenuItem("新建(N) Ctrl+N"),
    8. new JMenuItem("打开(O)... Ctrl+O"),
    9. new JMenuItem("保存(S) Ctrl+S"),
    10. new JMenuItem("另存为(A)... Ctrl+A")
    11. };
    12. //将以上菜单选项加入菜单
    13. for(JMenuItem m : mt){
    14. mn.add(m);
    15. }
    16. //横线加入菜单
    17. mn.addSeparator();
    18. //菜单加入菜单栏
    19. mb.add(mn);
    20. //菜单栏加入JFrame窗口
    21. jf.add(mb)

    14.2 简易计算器

    1. /**
    2. * 模仿电脑的计算器
    3. */
    4. public class Calculator extends JFrame{
    5. public static void main(String[] args) {
    6. new Calculator();
    7. }
    8. public Calculator(){
    9. //创建CalculatorPanel面板,并加入到JFrame中
    10. CalculatorPanel c = new CalculatorPanel();
    11. this.add(c);
    12. this.setTitle("简易计算器");
    13. this.setSize(220, 280);
    14. this.setVisible(true);
    15. //窗口关闭监听
    16. this.addWindowListener(new WindowAdapter(){
    17. public void windowClosing(WindowEvent e){
    18. System.exit(0);
    19. }
    20. });
    21. }
    22. }
    23. /***
    24. * 1、面板内包括一个显示文本框,和一个装按钮的面板
    25. * 2、按钮面板自定义了一个添加按钮方法,该方法传入按钮名字,监听事件
    26. * 方法内实现按钮的创建,并加入按钮面板
    27. * 3、自定义两种按钮点击事件:数字按钮点击事件、符号按钮点击事件
    28. */
    29. class CalculatorPanel extends JPanel{
    30. String command;
    31. boolean start;
    32. double result;
    33. //创建一个显示文本框,和一个装按钮的面板
    34. JTextField text = new JTextField();
    35. JPanel panel = new JPanel();
    36. public CalculatorPanel(){
    37. //第一个输入的数字的符号
    38. command = "+";
    39. //第一个输入的不能为符号按钮,必须是数字按钮
    40. start = true;
    41. //开始时,总数为0
    42. result = 0;
    43. //显示文本框设置为只读
    44. text.setEditable(false);
    45. //从右边开始显示
    46. text.setHorizontalAlignment(JTextField.RIGHT);
    47. //4行4列按钮布局
    48. panel.setLayout(new GridLayout(5, 4));
    49. MyListenerOne m1 = new MyListenerOne();
    50. MyListenerTwo m2 = new MyListenerTwo();
    51. //清除按钮
    52. addButton("C",new ActionListener() {
    53. @Override
    54. public void actionPerformed(ActionEvent e) {
    55. //第一个输入的数字的符号
    56. command = "+";
    57. //第一个输入的不能为符号按钮,必须是数字按钮
    58. start = true;
    59. //开始时,总数为0
    60. result = 0;
    61. text.setText("");
    62. }
    63. });
    64. //回删按钮
    65. addButton("←", new ActionListener() {
    66. @Override
    67. public void actionPerformed(ActionEvent e) {
    68. char[] ch = text.getText().toCharArray();
    69. int a = 0;
    70. int leng = ch.length-1;
    71. StringBuffer sb = new StringBuffer();
    72. while( (leng--)>0 ){
    73. sb.append(ch[a++]);
    74. }
    75. text.setText(sb.toString());
    76. }
    77. });
    78. //^2求平方按钮
    79. addButton("^2",m2);
    80. //√求开方按钮
    81. addButton("√",m2);
    82. addButton("7", m1);
    83. addButton("8", m1);
    84. addButton("9", m1);
    85. addButton("+", m2);
    86. addButton("4", m1);
    87. addButton("5", m1);
    88. addButton("6", m1);
    89. addButton("-", m2);
    90. addButton("1", m1);
    91. addButton("2", m1);
    92. addButton("3", m1);
    93. addButton("*", m2);
    94. addButton("0", m1);
    95. addButton(".", m1);
    96. addButton("=", m2);
    97. addButton("/", m2);
    98. this.setLayout(new BorderLayout());
    99. this.add(BorderLayout.NORTH,text);
    100. this.add(BorderLayout.CENTER,panel);
    101. this.setSize(200, 250);
    102. this.setVisible(true);
    103. }
    104. /**
    105. * 增加按钮,并为每个按钮增加监听
    106. * @param s 按钮名字
    107. * @param al 监听事件
    108. */
    109. public void addButton(String s, ActionListener al){
    110. JButton jb = new JButton(s);
    111. jb.addActionListener(al);
    112. panel.add(jb); //每个按钮都加入按钮面板中
    113. }
    114. /**
    115. * 数字按钮点击事件:
    116. */
    117. class MyListenerOne implements ActionListener{
    118. @Override
    119. public void actionPerformed(ActionEvent e) {
    120. //★获取当前点击按钮的动作命令(名字)
    121. String input = e.getActionCommand();
    122. //当显示文本中有数据,我们就先清空,否则进行数字拼接
    123. if( start ){
    124. text.setText("");
    125. start = false;
    126. }
    127. //判断,如果该字符串存在"."则无法再输入"."
    128. if(input.equals(".")){
    129. char[] ch = text.getText().toCharArray();
    130. for(char c : ch){
    131. if( c == 46 ){
    132. return;
    133. }
    134. }
    135. }//数字拼接,如:1253546
    136. text.setText(text.getText()+input);
    137. }
    138. }
    139. /**
    140. * 符号按钮点击事件:
    141. */
    142. class MyListenerTwo implements ActionListener{
    143. @Override
    144. public void actionPerformed(ActionEvent e) {
    145. //获取当前点击按钮的动作命令(名字)
    146. String s = e.getActionCommand();
    147. if(start){
    148. //★当第一个按下的是符号按钮是,如-,表示负数
    149. command = s;
    150. }else{
    151. //先判断是否为平方或者开方,不是则执行下面的运算
    152. if(s.equals("^2")){
    153. result = Double.parseDouble(text.getText())*Double.parseDouble(text.getText());
    154. }else if(s.equals("√")){
    155. result = Math.sqrt(Double.parseDouble(text.getText()));
    156. }else{
    157. //★本次使用的command是上次记录的command,如果是第一次进来该点击事件
    158. //★那么command就是初始化时候定义的"+",初始化时候的"+"也表示数字为正数
    159. if( command.equals("+") ){
    160. result += Double.parseDouble(text.getText());
    161. }else if( command.equals("-") ){
    162. result -= Double.parseDouble(text.getText());
    163. }else if( command.equals("*") ){
    164. result *= Double.parseDouble(text.getText());
    165. }else if( command.equals("/") ){
    166. result /= Double.parseDouble(text.getText());
    167. }else if( command.equals("=") ){
    168. result = Double.parseDouble(text.getText());
    169. }
    170. }
    171. //每次执行一次符号点击事件都进行一下操作:
    172. //1、将总数显示在显示文本
    173. text.setText(String.valueOf(result));
    174. //2、将start置true,不能连续输入多个符号
    175. start = true;
    176. //★3、记住当次进入该点击事件的command,下次使用
    177. command = s;
    178. }
    179. }
    180. }
    181. }

  • 相关阅读:
    ArcGIS教程——ArcGIS工具-按线分割面
    GO环境及入门案例
    Redis下载和安装(Windows系统)
    Java中transient关键字的详细总结
    ConvNeXt论文及实现
    Java使用IText根据pdf模板创建pdf文件
    zookeeper分布式锁demo
    性能优化之节流
    【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第39课-时间通知-按秒刷新
    SecureCRT for Mac注册激活版:专业终端SSH工具
  • 原文地址:https://blog.csdn.net/u010687761/article/details/126691363