组件详解

JFrame(窗口)常用方法

  • setTitle(String title) :设置框架的标题

    参数:title 为要设置的标题字符串。

    示例:

    frame.setTitle("我的窗口");
    
  • setVisible(boolean visible) :设置框架是否可见

    参数:visible 为布尔值,true 表示可见,false 表示不可见

    示例:

    frame.setVisible(true);
    
  • setDefaultCloseOperation(int operation) :设置框架关闭时的操作

    参数:常见的取值有 JFrame.EXIT_ON_CLOSE(退出程序)、JFrame.DISPOSE_ON_CLOSE(释放资源但不退出程序)等

    示例:

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
  • setSize(int width, int height) :设置框架的大小

    参数:width 为框架的宽度,height 为框架的高度。

    示例:

    frame.setSize(500, 400);
    
  • pack() :自动调整大小

    根据添加到框架中的组件的首选大小,自动调整框架的大小,以适应其包含的组件

    可以避免手动设置框架大小可能导致的组件显示不全或空间浪费的问题

    会导致 setSize(int width, int height) 方法失效

  • setLocation(int x, int y) :设置框架在屏幕上的位置

    参数:x 为横坐标,y 为纵坐标。

    示例:

    frame.setLocation(100, 100);
    // 设置在屏幕中心
    setLocation((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() - this.getWidth()) / 2,
                (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() - this.getHeight()) / 2);
    
  • getContentPane() :获取框架的内容面板

    示例:

    Container contentPane = frame.getContentPane();
    
  • add(Component component) :向框架的内容面板添加组件

    参数:component 为要添加的组件

    示例:

    frame.add(new JButton("按钮"));
    
  • remove(Component component) :从框架的内容面板移除组件

    参数:component 为要移除的组件

    示例:

    frame.remove(button);
    
  • setResizable(boolean resizable) :设置框架是否可由用户调整大小

    参数:visible 为布尔值,true 表示可见,false 表示不可见

    该属性默认为 true

    当设置为可调整大小时,用户可以根据自己的需求自由改变框架的宽度和高度,以适应不同的显示需求和操作习惯。但需要注意的是,如果框架中的组件布局没有合理处理大小变化,可能会导致界面显示不美观或功能异常。


文本输入组件

JTextField、JTextArea、JPasswordField

  • 常见文本输入组件

    • JTextField(文本域):只能接收单行文本

      把文本域添加到窗口的常用办法是将它添加到一个面板或者其他容器中

    • JTextArea(文本区):可以接收多行文本

    • JPasswordField(密码域):只能接收单行文本,但不会将输入的内容显示出来

      密码域是一种特殊类型的文本域。用户输入的字符不真正显示出来,而是用回显字符表示,并且无法复制


JTextField、JTextArea 等常用方法

  • javax.swing.JTextField extends JTextComponent:

    // 构造一个有给定列数的空JTextField对象
    JTextField(int cols)
    // 构造一个有给定列数和初始字符串的JTextField对象
    JTextField(String text, int cols)
    // 获取或设置文本域使用的列数
    int getColumns()
    void setColumns(int cols)
    
  • javax.swing.JPasswordField extends JTextComponent:

    // 构造一个新的密码域
    JPasswordField(String text, int columns)
    // 为密码域设置回显字符。不设置或值0都为默认的回显字符
    void setEchoChar(char echo)
    // 返回密码域中包含的文本。为了得到更好的安全性,在使用之后应该覆写所返回数组的内容(密码并不是以String返回,这是因为字符串在被垃圾回收之前会一直驻留在虚拟机中)
    char[] getPassword()
    
  • javax.swing.JTextArea extends JTextComponent:

    // 构造一个新的文本区
    JTextArea()
    JTextArea(int rows, int cols)
    JTextArea(String text, int rows, int cols)
    
    // 设置文本区应该使用的首选列数
    void setColumns(int cols)
    // 设置文本区应该使用的首选行数
    void setRows(int rows)
    // 将给定的文本追加到文本区中已有文本的末尾
    void append(String newText)
    // 打开或关闭换行。注:换行只是视觉效果,文本实际没有改变,并没有在文本中自动插入'\n'字符
    void setLineWrap(boolean wrap)
    // 如果word是true,超长的行会在单词边界换行。如果为false,超长的行会被截断而不考虑单词边界
    void setWrapStyleWord(boolean word)
    // 将制表符(tab stop)设置为c列。注意,制表符不会被转化为空格,但可以让文本对齐到下一个制表符处。
    void setTabSize(int c)
    
  • java.swing.text.JTextComponent extends Component

    // 获取或设置文本组件的文本内容
    String getText()
    void setText(String text)
    // 获取或设置用户是否可以编辑这个文本组件的内容
    boolean isEditable()
    void setEditable(boolean b)
    // 重新计算组件的位置和大小
    void revalidate()
    // 设置这个组件的字体
    void setFont(Font f)
    
  • java.awt.Component

    // 重新计算组件的位置和大小。如果组件是容器,容器中包含的所有组件的位置和大小也会重新计算
    void validate()
    // 获取组件的字体
    Font getFont()
    

滚动窗格:JScrollPane

  • 在 Swing 中,文本区没有滚动条。如果需要滚动条,可以将文本区放在滚动窗格中,如果文本超出了文本区可以显示的范围,滚动条就会自动地出现,删除部分文本后,如果文本能够显示在文本区范围内,滚动条会再次自动地消失。滚动是由滚动窗格内部处理的,编写程序时无须处理滚动事件。

    这是一种适用于所有组件的通用机制,而不是文本区特有的。要想为组件添加滚动条,只需将它们放入一个滚动窗格中即可。

  • javax.swing.JScrollPane

    // 创建一个滚动窗格,用来显示指定组件的内容。当组件内容超过显示范围时,滚动条会自动出现
    public JScrollPane(Component c)
    
  • 代码示例

    JTextArea textArea = new JTextArea(2, 20);
    JScrollPane scrollPane = new JScrollPane(textArea);
    jFrame.add(scrollPane, BorderLayout.CENTER);
    

标签组件:JLabel

  • 标签是容纳文本的组件,它们没有任何的修饰(例如没有边缘),也不能响应用户输入。可以利用标签标识组件。

  • 例如。与按钮不同,文本域没有标识它们的标签。要想用标识符标识这种本身不带标签的组件:

    • 用正确的文本构造一个JLabel组件
    • 将它放置在距离需要标识的组件足够近的地方,以便用户看出这个标签所标识的组件
  • JLabel 的构造器允许指定初始文本和图标,也可以选择内容的排列方式

    public JLabel(String text)
    public JLabel(Icon icon)
    public JLabel(String text, int align)
    public JLabel(String text, Icon icon, int align):构造一个标签。align参数是一个SwingConstants常量
    
    • text 参数:标签的文本
    • icon 参数:标签的图标
    • align 参数:标签的排列方式,JLabel 类或 SwingConstants 接口常量(LEFT、RIGHT、CENTER、NORTH、EAST)
  • javax.swing.JLabel 常用方法:

    // 获取或设置标签的文本
    String getText()
    void setText(String text)
    // 获取或设置标签的图标
    Icon getIcon()
    void setIcon(Icon icon)
    
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐