跳转到内容

Java Swing/Swing

100% developed
来自维基教科书,开放世界中的开放书籍

第一个 GUI

[编辑 | 编辑源代码]

好的,现在是时候深入 Swing 了。启动您的文本编辑器或 IDE,然后输入以下代码。

Computer code HelloSwing.java
import javax.swing.JFrame;

public class HelloSwing {

    public static void main(String[] args) {
        
        JFrame frame = new JFrame(); //We create a new frame
        frame.setSize(200, 100); //Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Frame must close when close button is pressed
        frame.setVisible(true);

    }
}

输出

编译代码并运行它。如果您获得如上所示的输出,则表示您已全部做对了。

它是如何工作的?

[编辑 | 编辑源代码]

现在让我们看看它是如何工作的。与所有 Java 程序一样,该程序从创建一个类开始,我们将其命名为HelloSwing。该类包含程序从其开始执行的 main 方法。该函数中的第一行是

Example 代码部分
JFrame frame = new JFrame();

在第一行中,我们创建新的 Java 框架或 JFrame。框架不过是一个 Swing 容器,它包含其他组件,如标签、按钮、文本字段、菜单栏等。现在,由于我们已经创建了一个框架,并且在显示它之前,我们需要设置它的尺寸。要设置框架的尺寸,我们使用以下代码

Example 代码部分
frame.setSize(200, 100);

setSize(int width, int height)接受两个参数,第一个是框架宽度,第二个是框架高度。我们已将框架尺寸设置为 200 像素(px)宽,100px 高。因此,框架尺寸已成功设置。

现在,如果有人点击框架中的关闭按钮会发生什么?我们希望程序退出并清除内存,因此在点击关闭按钮时,我们使用setDefaultCloseOperation()函数来关闭框架。我们希望程序在按下关闭按钮时退出,因此我们使用以下代码

Example 代码部分
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

所有操作都已正确完成,我们现在需要做的就是使框架可见。为此,我们使用setVisible(boolean b)函数。该函数接受一个布尔输入。如果传入 true,则框架可见,否则如果传入 false,则框架不可见。为了使框架可见,我们使用以下代码

Example 代码部分
frame.setVisible(true);

因此,我们创建了 HelloSwing 程序。

深入 Swing

[编辑 | 编辑源代码]

带标题的框架

[编辑 | 编辑源代码]

在最后一个示例中,我们看到了如何创建一个没有任何内容的框架。这次我们将创建一个带标题的框架。为此,让我们创建一个类FrameWithTitle。所有代码与之前的示例完全相同,只有一个变化。请注意 main 方法中的第一个语句

Example 代码部分
JFrame frame = new JFrame("Hello Swing");

在这里,new JFrame()构造函数获取一个字符串参数。此参数构成框架的标题。简单!

Computer code FrameWithTitle.java
import javax.swing.JFrame;

public class FrameWithTitle {
    
    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setVisible(true);

    }

}

输出

编译 FrameWithTitle 代码将给出如上所示的输出。

添加标签

[编辑 | 编辑源代码]

我们已经创建了一个空框架,一个带标题的框架,现在让我们看看如何向框架添加一个简单的组件。标签是一个简单的组件,我们将把它添加到我们的框架中。仔细阅读以下程序。与之前的示例相比,它有一个新语句。

Computer code AddingLabel.java
import javax.swing.JFrame;
import javax.swing.JLabel;

public class AddingLabel {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.setVisible(true);

    }
}

输出

看看这行

Example 代码部分
frame.add(new JLabel("Diving into swing!"));

在这行中,我们使用add()函数告诉计算机将一个组件或对象添加到框架中。由于我们要添加一个标签,因此我们使用new JLabel()命令传递一个新的标签对象。

new JLabel("Diving into swing!") 创建一个新的标签。添加后,框架使用frame.setVisible(true);显示。

如果一切都做对了,您应该得到如上所示的输出。

标签和文本

[编辑 | 编辑源代码]
Computer code LabelnText.java
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LabelnText {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here"));// Adding text field
        frame.setVisible(true);

    }

}

输出

在最后一个示例(AddingLabel.java)中,我们看到了如何将 JLabel 添加到 JFrame。现在,我们将通过添加更多组件来扩展我们的知识。让我们添加一个文本字段(即 JTextField)以及标签。上面显示的程序(LabelnText.java)与 AddingLabel.java 的代码相同,但略有不同。看看倒数第二行frame.add(new JTextField("Type something here"));,在这行中,我们使用add()方法将JTextField添加到框架中。在 add 方法中,我们使用new JTextField("Type something here")语句传递一个新的 JTextField。JTextField()构造函数可以接受一个字符串参数,该参数设置为文本字段的文本值。

因此,当我们运行示例时,我们希望框架在它的右侧有一个标签和一个文本字段。但是看看输出。哪里错了?我们只看到一个占用了整个框架的文本字段!Java 有 bug 吗?答案是标签和文本字段都存在于框架中。文本字段绘制在标签的顶部。

Java 虚拟机很傻。您告诉它放一个标签,它就放了一个标签到框架上,接下来您告诉它放一个文本字段,它就忠实地执行了。但它把文本字段放在了标签的顶部。为了获得期望的输出,比如标签和文本字段并排放置,我们必须使用所谓的布局管理器,稍后将对此进行简要介绍。

布局管理器

[编辑 | 编辑源代码]
Computer code LayoutManagerDemo.java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LayoutManagerDemo {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setLayout(new FlowLayout()); // Adding layout, flow layout in this case
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here")); // Adding text field
        frame.setVisible(true);

    }
}

输出

让我们看看如果我们改变框架尺寸会发生什么。

Computer code LayoutManagerDemo1.java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LayoutManagerDemo1 {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(500, 100); // Setting size of width=500px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setLayout(new FlowLayout()); // Adding layout, flow layout in this case
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here")); // Adding text field
        frame.setVisible(true);

    }
}


输出

打包框架

[编辑 | 编辑源代码]

打包优化了框架的大小。

Computer code PackingFrames.java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class PackingFrames {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        //frame.setSize(500, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setLayout(new FlowLayout());
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here")); // Adding text field
        frame.pack(); // Packing components into frames. This is like auto sizing of frames
        frame.setVisible(true);

    }
}

输出


华夏公益教科书