• 创建简单的用户界面


    Swing和抽象窗口工具包

      在java中,使用两组类来开发程序的用户界面:Swing早期的称为抽象窗口工具包的一组类。这些类让你能够创建图形用户界面以及接收用户输入。

      Swing提供了创建可运行的GUI所需的所有类,不管用户在哪种操作系统中运行Java程序。

    使用组件

      组织图形用户界面时,需要使用两类对象:组件和容器。组件是用户界面中的独立元素,如按钮或滑块;容器是用于容纳其他组件的组件。

      创建界面的第一步是创建能够容纳组件的容器。在应用程序中,该容器通常是窗口或框架。

      框架:包含用户运行软件时希望看到的所有常见的窗口特性,如关闭按钮、最大化按钮和最小化按钮。

      这些容器分别是使用Swing包中的JWindow和JFrame类创建的。为了在Java程序中引用Swing包而且无需使用完整的包和类名,可使用下面的语句:

    import javax.swing.*;

      

     1 import javax.swing.*;
     2 
     3 public class SalutonFrame extends JFrame {
     4     public SalutonFrame() {
     5         super("Saluton mondo!");
     6         setLookAndFeel();
     7         setSize(350, 100);
     8         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     9         setVisible(true);
    10     }
    11     
    12     private void setLookAndFeel() {
    13         try {
    14             UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    15         } catch (Exception exc) {
    16             
    17         }
    18     }
    19     
    20     public static void main(String[] arguments) {
    21         SalutonFrame frame = new SalutonFrame();
    22     }
    23 }

      如上述代码所示:

      创建框架时,必须在框架的构造函数中执行几种操作:

      1.调用超类JFrame的构造函数;如:super();super("Main Frame");

      2.调置框架的标题;setTitle("Main Frame");

      3.设置框架的大小;setSize(350, 125);也可以先用组件填充它,然后调用不带参数的pack()方法,

      4.设置框架的外观;Java包含了一个增强的外观,名为Nimbus,当在类中使用时,必须先启用。通过调用主Swing包中UIManager类的setLookAndFeel()方法可以设置外观;该方法接受一个参数:外观类的完整名称。

      5.定义用户关闭框架时应执行的操作;

      6.显示框架:使用true作为参数调用setVisible()方法

    按钮

    JButton okButton = new JButton("OK");

      创建JButton等组件后,应调用add()方法将其加入到容器中:add(okButton);

      在容器中添加组件时,不需要指明组件在容器中显增的位置,组件的布局由被称为布局管理器的对象决定。最简单的布局管理器是FlowLayout类,它位于java.awt包中。

    FlowLayout flo = new FlowLayout();

      创建布局管理器后,调用容器的setLayout()方法将其管理器同容器关联起来

    setLayout(flo);
     1 import javax.swing.*;
     2 import java.awt.*;
     3 
     4 public class Playback extends JFrame {
     5     public Playback() {
     6         super("Playback");
     7         setLookAndFeel();
     8         setSize(225, 80);
     9         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    10         FlowLayout flo = new FlowLayout();
    11         setLayout(flo);
    12         JButton play = new JButton("Play");
    13         JButton stop = new JButton("Stop");
    14         JButton pause = new JButton("Pause");
    15         add(play);
    16         add(stop);
    17         add(pause);
    18         setVisible(true);
    19     }
    20     
    21     private void setLookAndFeel() {
    22         try {
    23             UIManager.setLookAndFeel("com.sun.java.swing.plaf.NimbusLookAndFeel");
    24         } catch (Exception exc) {
    25             
    26         }
    27     }
    28     public static void main(String[] arguments) {
    29         Playback frame = new Playback();
    30     }
    31 
    32 }
    按钮代码示例

    标签和文本框

    1         FlowLayout flo = new FlowLayout();
    2         setLayout(flo);
    3         JLabel pageLabel = new JLabel("Web page address: ", JLabel.RIGHT);
    4         JTextField pageAddress = new JTextField(20);
    5         add(pageLabel);
    6         add(pageAddress);
    标签和文本框示例

      JTextField.getText()获取文本;JTextField.setText()设置文本。

    复选框

    1         FlowLayout flo = new FlowLayout();
    2         setLayout(flo);
    3         JCheckBox jumoSize = new JCheckBox("Jumbo Size", true);
    4         add(jumoSize);
    复选框示例

    组合框

      JComboBox组件是一个弹出式选择列表,也可以设置成能够接收文本输入。

     1         FlowLayout flo = new FlowLayout();
     2         setLayout(flo);
     3         JComboBox profession = new JComboBox();
     4         profession.addItem("Butcher");
     5         profession.addItem("Backer");
     6         profession.addItem("Candlestick maker");
     7         profession.addItem("Fletcher");
     8         profession.addItem("Fighter");
     9         profession.addItem("Technical writer");
    10         add(profession);
    复选框代码示例

      要让JComboBox组件能够接收文本输入,必须使用true作为参数调用其setEditable()方法,如profession.setEditable(true); 必须在将组件加入容器中之前调用该方法。

    文本区域

    1         FlowLayout flo = new FlowLayout();
    2         setLayout(flo);
    3         JTextArea comments = new JTextArea(8, 40);
    4         add(comments);
    文本区域代码示例

      JTextArea组件允许用户输入多行文本,可以指定该组件的宽度和高度。

      当用户输入的文本超出一行时,可以调用文本区域的两个方法来指定组件的处理方式。调用带有true参数的setLineWrap(boolean)方法可以让文本换行。

      当用户输入的文件到达区域的底部时,它会自动增大区域,但是在区域的右边缘或下边缘并没有滚动条。要想用更好的方式来实现文本区域组件,必须将其放置到名为滚动面板的容器中。

      在Swing中,可以将组件添加到一个滚动面板中来实现滚动。滚动面板是由JScrollPan类表示的一个容器。

    1         FlowLayout flo = new FlowLayout();
    2         setLayout(flo);
    3         JTextArea comments = new JTextArea("I am ok
     see you...", 8, 40);
    4         comments.setLineWrap(true);
    5         comments.setWrapStyleWord(true);
    6         JScrollPane scroll = new JScrollPane(comments, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
    7                 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    8         add(scroll);
    文本区域代码示例

     面板

      面板,是使用Swing中的JPanel类创建的。JPanel对象是可在图形用户界面中使用的最简单的一种容器,用于将显示区域划分成不同的组件组。将显示区域分成几部分后,可以在每个部分使用不同的布局管理器。

    1         FlowLayout flo = new FlowLayout();
    2         setLayout(flo);
    3         JPanel topRow = new JPanel();
    4         topRow.setLayout(flo);
    5         add(topRow);
    面板示例代码

      通过调用面板的add()方法可以将组件添加到面板中。还可以通过调用setLayout()方法,直接给面板指派一个布局管理器。

      当需要在界面中包含绘画区域时(如显示图像文件中的图像),也可以使用面板。

      JPanel的另一种用途是,用于创建可加入到其他类的组件。

    创建自己的组件

     1 import java.io.IOException;
     2 import java.nio.file.*;
     3 import javax.swing.*;
     4 
     5 public class FreeSpacePanel extends JPanel {
     6     JLabel spaceLabel = new JLabel("Disk space: ");
     7     JLabel space = new JLabel();
     8     
     9     public FreeSpacePanel() {
    10         super();
    11         add(spaceLabel);
    12         add(space);
    13         try {
    14             setValue();
    15         } catch (IOException ioe) {
    16             space.setText("Error");
    17         }
    18     }
    19     
    20     private final void setValue() throws IOException {
    21         // get the current file storage pool
    22         Path current = Paths.get("");
    23         FileStore store = Files.getFileStore(current);
    24         // find the free storage space
    25         long totalSpace = store.getTotalSpace();
    26         long freeSpace = store.getUnallocatedSpace();
    27         // get this as a persentage (with two digits)
    28         double percent = (double)freeSpace / (double)totalSpace * 100;
    29         percent = (int)(percent * 100) / (double) 100;
    30         // set the label's text
    31         space.setText(freeSpace + " free out of " + totalSpace + " ("
    32                 + percent + "%)");
    33     }
    34 }
    FreeSpacePanel
     1 import java.awt.*;
     2 import javax.swing.*;
     3 
     4 public class FreeSpaceFrame extends JFrame{
     5     public FreeSpaceFrame() {
     6         super("Disk Free Space");
     7         setLookAndFeel();
     8         setSize(500, 100);
     9         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    10         FlowLayout flo = new FlowLayout();
    11         setLayout(flo);
    12         FreeSpacePanel freePanel = new FreeSpacePanel();
    13         add(freePanel);
    14         setVisible(true);
    15     }
    16     private void setLookAndFeel() {
    17         try {
    18             UIManager.setLookAndFeel("com.sun.java.swing.plaf.NimbusLookAndFeel");
    19         } catch (Exception exc) {
    20             
    21         }
    22     }
    23     public static void main(String[] arguments) {
    24         FreeSpaceFrame frame = new FreeSpaceFrame();
    25     }
    26 }
    FreeSpaceFrame

      上述应用程序可以显示可用的磁盘空间、总的磁盘空间,以及两者的百分比。

      

  • 相关阅读:
    [KB] Office序列号移除器
    收音机的记忆
    EnCase v7 正式版预览
    关于Ex01和EnCase 6.19的小道消息
    EnCase V7 正式发布 新特性
    [EnCase v7专题] EX01证据文件获取设置释疑
    智能手机应用取证系列之三:腾讯微博Android手机客户端取证分析
    [EnCase v7] EnCase v7零售版改用CodeMeter加密狗
    Http Server的一个示例
    一个简单的加解密算法
  • 原文地址:https://www.cnblogs.com/dulixiaoqiao/p/6476644.html
Copyright © 2020-2023  润新知