Java 图形用户界面

JFrame

JFrame是Java中用于创建图形用户界面(GUI)的顶级容器类。

JFrame类是Swing库中的一个关键组件,它代表一个窗口,可以向其中添加各种GUI组件来构建应用程序的用户界面。以下是JFrame的一些基本用法和特性:

  • 创建JFrame对象:可以通过实例化JFrame类来创建一个窗口,并可以通过构造函数设置窗口的标题。例如,JFrame jf = new JFrame("我是标题鸭!!!"),或者在创建后使用setTitle()方法设置标题,如jf.setTitle("我是标题鸭!!!")。
  • 设置窗体大小和位置:可以使用setSize()方法来设置窗体的宽度和高度,或者使用setBounds()方法来指定窗体的确切位置和大小。例如,jf.setSize(20,10)会设置一个20像素宽、10像素高的窗体,而jf.setBounds(1,2,20,10)会设置一个左上角顶点在屏幕坐标(1,2)的位置,宽度为20像素,高度为10像素的窗体。
  • 添加组件:JFrame包含一个名为JRootPane的唯一子容器,它又包含了一个内容窗格(content pane),通常应该将所有非菜单组件添加到这个内容窗格中。这与早期的AWT Frame有所不同,为了方便起见,JFrame重写了add、remove和setLayout方法,使它们能够将调用委托给内容窗格的相应方法。
  • 设置默认关闭操作:可以使用setDefaultCloseOperation()方法来设置当用户关闭窗口时程序的行为。例如,jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)会设置当用户关闭窗口时,程序将终止运行。
  • 设置窗体可见性:通过调用setVisible(true)方法可以使窗体可见。在默认情况下,窗体是不可见的,只有在设置为可见后,用户才能在屏幕上看到它。

    下面是一个简单的示例代码,演示了如何使用JFrame创建一个窗口: 

    import javax.swing.*;
    public class MyWindow {
        public static void main(String[] args) {
            // 创建JFrame对象
            JFrame jf = new JFrame("我的窗口");
            // 设置窗体大小和位置
            jf.setSize(300, 200);
            jf.setLocation(100, 100);
            // 设置默认关闭操作
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // 设置窗体可见性
            jf.setVisible(true);
        }
    }
    

     

     GUI菜单组成

    在Java的Swing库中,GUI菜单由以下组件组成:

    JMenuBar:这是菜单栏的容器,它通常位于窗口的顶部。可以通过创建一个JMenuBar实例并将其设置为窗体的菜单栏来定义一个菜单栏。例如:

    JMenuBar menuBar = new JMenuBar();
    frame.setJMenuBar(menuBar);
    

    JMenu:这些是菜单栏中的单个菜单,如“文件”、“编辑”等。可以通过创建一个JMenu实例并将其添加到JMenuBar来创建菜单。例如:

    JMenu fileMenu = new JMenu("文件");
    menuBar.add(fileMenu);
    

    JMenuItem:这些是菜单中的单个选项,用户可以通过它们执行操作。可以通过创建一个JMenuItem实例并将其添加到JMenu来创建菜单项。例如:

    JMenuItem openItem = new JMenuItem("打开");
    fileMenu.add(openItem);
    

    JCheckBoxMenuItem:这是一种特殊类型的菜单项,它具有一个可以切换的复选框。例如:

    JCheckBoxMenuItem checkItem = new JCheckBoxMenuItem("显示状态栏");
    fileMenu.add(checkItem);
    

    JRadioButtonMenuItem:这是一种特殊类型的菜单项,它具有一个单选按钮。例如:

    JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem("选择颜色");
    fileMenu.add(radioItem);
    

    JPopupMenu:这是弹出菜单,当用户右键单击时出现。例如:

    JPopupMenu popup = new JPopupMenu();
    popup.add(new JMenuItem("复制"));
    popup.add(new JMenuItem("粘贴"));
    component.setComponentPopupMenu(popup);
    

    JSeparator:这是一个用于分隔菜单项的视觉元素,通常用于改善菜单的可读性。例如:

    JMenu menu = new JMenu("类型");
    menu.add(new JMenuItem("水果"));
    menu.add(new JSeparator());
    menu.add(new JMenuItem("蔬菜"));
    

     

    书写过程

    Java GUI菜单代码书写步骤如下:

    导入必要的包和类。

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    

    创建主窗口类,继承JFrame类。

    public class MainWindow extends JFrame {
        // 构造方法
        public MainWindow() {
            // 设置窗口标题
            setTitle("Java GUI菜单示例");
            // 设置窗口大小
            setSize(400, 300);
            // 设置窗口关闭操作
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // 创建菜单栏
            JMenuBar menuBar = new JMenuBar();
            // 创建菜单
            JMenu fileMenu = new JMenu("文件");
            JMenu editMenu = new JMenu("编辑");
            // 创建菜单项
            JMenuItem openItem = new JMenuItem("打开");
            JMenuItem saveItem = new JMenuItem("保存");
            JMenuItem copyItem = new JMenuItem("复制");
            JMenuItem pasteItem = new JMenuItem("粘贴");
            // 将菜单项添加到菜单中
            fileMenu.add(openItem);
            fileMenu.add(saveItem);
            editMenu.add(copyItem);
            editMenu.add(pasteItem);
            // 将菜单添加到菜单栏中
            menuBar.add(fileMenu);
            menuBar.add(editMenu);
            // 将菜单栏添加到窗口中
            setJMenuBar(menuBar);
        }
    }
    

    在主函数中创建主窗口对象并显示。

    public static void main(String[] args) {
        MainWindow mainWindow = new MainWindow();
        mainWindow.setVisible(true);
    }
    

    这样就完成了一个简单的Java GUI菜单代码的书写。

     

    ImageIcon

    ImageIcon是Java Swing库中用于表示图像图标的类,它允许开发者在Swing组件中显示图像。

    ImageIcon类是Icon接口的一个实现,它使用图片来绘制图标。这个类提供了多个构造函数,可以从不同的来源创建ImageIcon对象:

    • 从文件名创建:通过提供一个文件名,ImageIcon可以加载该文件中的图像并创建一个图标。例如,ImageIcon("path/to/image.jpg")会从指定路径加载图像文件。
    • 从URL创建:如果图像位于网络上,可以通过提供URL来创建ImageIcon。例如,ImageIcon(new URL("http://example.com/image.jpg"))。
    • 从字节数组创建:如果图像数据以字节数组的形式存在,可以使用这个构造函数来创建ImageIcon。例如,ImageIcon(byteArray),其中byteArray包含了图像的字节数据。
    • 从Image对象创建:如果已经有了一个java.awt.Image对象,可以直接用它来创建一个ImageIcon。例如,ImageIcon(image),其中image是一个Image对象。

      使用ImageIcon可以方便地将图像添加到Swing组件中,例如JLabel、JButton等。以下是一个简单的示例:

      import javax.swing.*;
      import java.awt.*;
      public class ImageIconExample {
          public static void main(String[] args) {
              JFrame frame = new JFrame("ImageIcon示例");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setSize(300, 200);
              // 创建一个ImageIcon对象并指定图片路径
              ImageIcon icon = new ImageIcon("path/to/your/image.jpg");
              // 将ImageIcon添加到JLabel中
              JLabel label = new JLabel(icon);
              // 将JLabel添加到JFrame中
              frame.add(label);
              frame.setVisible(true);
          }
      }
      

      在这个示例中,我们创建了一个ImageIcon对象,并将其添加到一个JLabel中。然后,我们将JLabel添加到JFrame中,并设置窗口的大小和关闭操作。最后,我们调用setVisible(true)方法使窗口可见。

      动作监听事件 ActionListener  

      Java动作监听事件是指在Java程序中,当用户执行某个动作(如点击按钮、选择菜单项等)时,触发的事件处理机制。在Java中,我们通常使用事件监听器(Event Listener)来处理这些事件。

      以下是一个简单的Java动作监听事件示例:

      首先,我们需要创建一个实现了ActionListener接口的类,该接口包含一个名为actionPerformed的方法,该方法将在事件发生时被调用。

      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      public class MyActionListener implements ActionListener {
          @Override
          public void actionPerformed(ActionEvent e) {
              System.out.println("按钮被点击了!");
          }
      }
      

      然后,我们需要创建一个按钮(JButton),并将我们的事件监听器添加到该按钮上。

      import javax.swing.JButton;
      import javax.swing.JFrame;
      public class Main {
          public static void main(String[] args) {
              // 创建一个窗口
              JFrame frame = new JFrame("Java动作监听事件示例");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setSize(300, 200);
              // 创建一个按钮
              JButton button = new JButton("点击我");
              // 创建一个事件监听器实例
              MyActionListener listener = new MyActionListener();
              // 将事件监听器添加到按钮上
              button.addActionListener(listener);
              // 将按钮添加到窗口中
              frame.getContentPane().add(button);
              // 显示窗口
              frame.setVisible(true);
          }
      }
      

      运行上述代码,将会显示一个包含一个按钮的窗口。当我们点击按钮时,控制台将输出“按钮被点击了!”。

      鼠标监听事件 MouseListener

      Java中的鼠标监听事件是通过实现MouseListener接口来处理的。这个接口包含了几个重要的方法,用于响应不同的鼠标操作:

      • mouseEntered(MouseEvent e):当鼠标移入组件时调用。
      • mouseExited(MouseEvent e):当鼠标移出组件时调用。
      • mousePressed(MouseEvent e):当鼠标按钮被按下时调用。
      • mouseReleased(MouseEvent e):当鼠标按钮被释放时调用。

        此外,如果需要更详细的鼠标跟踪,如鼠标的移动,可以实现MouseMotionListener接口,它提供了mouseMoved和mouseDragged两个方法。

        在实际应用中,通常会看到MouseAdapter类的使用,它是一个抽象适配器类,实现了MouseListener和MouseMotionListener接口的所有方法,但所有方法都是空实现。这样做的目的是允许我们只重写我们关心的方法,而不是所有的鼠标事件方法,从而减少代码量并提高可读性。

        以下是一个简单的Java鼠标监听事件示例代码:

        import java.awt.*;
        import java.awt.event.*;
        public class MouseListenerExample extends Frame implements MouseListener {
            Label label;
            public MouseListenerExample() {
                setLayout(new FlowLayout());
                label = new Label("Click me!");
                add(label);
                addMouseListener(this); // 添加鼠标监听器
                setSize(300, 200);
                setVisible(true);
            }
            // 实现MouseListener接口的方法
            public void mouseClicked(MouseEvent e) {
                label.setText("Mouse clicked at (" + e.getX() + ", " + e.getY() + ")");
            }
            public void mouseEntered(MouseEvent e) {
                label.setText("Mouse entered");
            }
            public void mouseExited(MouseEvent e) {
                label.setText("Mouse exited");
            }
            public void mousePressed(MouseEvent e) {
                label.setText("Mouse pressed");
            }
            public void mouseReleased(MouseEvent e) {
                label.setText("Mouse released");
            }
            public static void main(String[] args) {
                new MouseListenerExample();
            }
        }
        

        这个例子创建了一个包含一个标签的窗口,并实现了MouseListener接口。当鼠标在窗口内进行操作时,标签会显示相应的信息。

         

        键盘监听事件 KeyListener  

        在Java中,键盘监听事件是通过实现KeyListener接口来处理的。这个接口定义了三个方法,用于响应不同的键盘操作:

        • keyTyped(KeyEvent e):当按下并释放一个键时调用。这个方法可以识别大多数键,但某些特殊键(如功能键)可能无法识别。

        • keyPressed(KeyEvent e):当按下一个键时调用。这个方法可以识别所有键,包括特殊键。

        • keyReleased(KeyEvent e):当释放一个键时调用。

          要使用键盘监听,你需要创建一个实现了KeyListener接口的类或直接实现这些方法,然后将这个类的实例添加到你想要监听的组件上。通常,我们会将键盘监听器添加到JFrame、JPanel或其他容器组件上。

          以下是一个简单的Java键盘监听事件示例:

          import javax.swing.*;
          import java.awt.event.*;
          public class KeyListenerExample extends JFrame implements KeyListener {
              private JLabel label;
              public KeyListenerExample() {
                  label = new JLabel("Press a key");
                  label.setHorizontalAlignment(JLabel.CENTER);
                  add(label);
                  setSize(400, 300);
                  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  setLocationRelativeTo(null);
                  setVisible(true);
                  addKeyListener(this); // 添加键盘监听器
              }
              @Override
              public void keyTyped(KeyEvent e) {
                  label.setText("Key typed: " + e.getKeyChar());
              }
              @Override
              public void keyPressed(KeyEvent e) {
                  label.setText("Key pressed: " + e.getKeyChar());
              }
              @Override
              public void keyReleased(KeyEvent e) {
                  label.setText("Key released: " + e.getKeyChar());
              }
              public static void main(String[] args) {
                  SwingUtilities.invokeLater(() -> new KeyListenerExample());
              }
          }
          

          在这个例子中,我们创建了一个JFrame窗口,并添加了一个JLabel标签来显示键盘事件的信息。我们实现了KeyListener接口的所有方法,并将这个类的实例添加到JFrame上。运行程序后,当你在窗口内按下、释放或键入字符时,标签会更新显示相应的信息。