Series Articles of Java Learning -- 05

Java学习实录03 -- JFrame小知识大杂烩

Posted by OUC_LiuX on March 31, 2021

窗口位置

  • 可以使用setLocationRelativeTo(null)方法将窗口在屏幕中央显示。
    JFrame 中的 setLocationRelativeTo(Component c)是从java.awt.Window类继承的方法,用于设置当前窗口相对于指定组件c的位置。
    如果指定组件当前未显示,或者c = null,则此窗口位于屏幕的中央。
    如果组件c在屏幕的右部,则当前窗口将被放置在左部,其他情况亦然。

  • 可以使用setLocation(up, left)方法设置窗口距显示屏上边缘up像素,距显示屏左边缘left像素。

窗口退出方式

可以通过setDefaultCloseOperation(int operation)设置用户在此窗口上发起 “close” 时默认执行的操作。其中参数operation的取值和含义有:

  • 0JFrame.DO_NOTHING_ON_CLOSE:不执行任何操作。
  • 1JFrame.HIDE_ON_CLOSE:隐藏窗口界面而不关闭程序,任务管理器中可以看到java.exe依然在运行。点击关闭按钮后在IDE中已无法再启动窗口,因为程序线程尚未关闭,窗口仍在。
  • 2JFrame.DISPOSE_ON_CLOSE:释放窗口对象而不关闭程序,任务管理器中可以看到java.exe依然在运行,只是释放窗口占用的资源。
  • 3JFrame.EXIT_ON_CLOSE:使用 System exit 方法退出应用程序。仅在应用程序中使用,从系统层级结束进程。

标签Label值的位置

当不指定位置构造标签对象的时候,如JLabel label = new JLabel("value");,默认内容“value”居中;可以通过SwingConstants参数主动指定值“value”的位置。如new JLabel("value", SwingConstants.RIGHT);意味着值在右;类似地,将RIGHT换成CENTER、LEFT即为指定居中或居左。

面板布局

建立JFrame后调用对象的setLayout(param) 方法指定JFrame对象布局。
最常用最简单的一种布局是边界布局BorderLayout,可以通过setLayout(new BorderLayout())指定,不指定也没事儿,它是窗口、框架的内容窗格和对话框等的缺省布局。BorderLayout把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER),如下图。

add组建的时候在组件参数后面加跟BorderLayout.xxxx参数(xxxx可以是WEST、EAST、CENTER这些)指定组件的位置。如果未指定位置,则缺省的位置是CENTER。 南、北位置控件各占据一行,控件宽度将自动布满整行。东、西和中间位置占据一行;若东、西、南、北位置无控件,则中间控件将自动布满整个屏幕。若东、西、南、北位置中无论哪个位置没有控件,则中间位置控件将自动占据没有控件的位置。

项目用到的另一种布局是GridLayout(row, col)网格布局,通过row和col参数指定行数和列数,随即版面被均等地划分成row行col列的矩形网格区域, 每个区域只能放置一个组件。

文本域自动换行、添加滚动条、实时更新

自动换行

JTextArea文本域对象JTextAreaObject通过调用setLineWrap()方法完成自动换行:

JTextAreaObject.setLineWrap(boolean);  // 默认为false,不自动换行            

当布尔参数为false的时候,将不自动换行;true激活该功能。另外需要了解的是,英文单词的换行有两种风格,可以通过:

JTextAreaObject.setWrapStyleWord(boolean);  //默认为true

设置。布尔参数为true意思是在单词边界处换行(每行最右侧可能留白),当设置为false时候在字符边界处换行,右侧不留白,但最右侧单词可能会被分成两部分显示。

滚动条

要给文本域添加滚动条,需要构造一文本域对象为参数的JScrollPane对象:

JScrollPane scorllPane = new JScrollPane( JTextAreaObject)   

滚动条默认是当文字超出范围文本域后才显示,但可以通过以下语句主动激活其常显示功能:

scrollPane.setVerticalScrollBarPolicy( param);   

命令意思是设置垂直滚动条策略,参数有:

@ params:  
@ JScrollPane.VERTICAL_SCROLLBAR_ALWAYS     // 常显示    
@ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED  // 当需要时显示(默认)    
@ JScrollPane.VERTICAL_SCROLLBAR_NEVER      // 从不显示   

额外的,我们还可以类似地设置水平滚动条策略:

scrollPane.setHorizontalScrollBarPolicy( param);    

参数相应地为:

params:   
@ JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS   
@ JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED   
@ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER       

实时更新

默认地,当Swing主线程运行时向JTextArea对象添加或删改内容,不会实时地刷新在屏幕上,而是等到线程结束才一并显示。调用文本域对象的paintImmediately()方法可以使之实时刷新:

paintImmediately(infoPrint.getBounds());

原理暂不做探讨,后续有时间会进行剖析。