- 浏览: 733094 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lingsuch:
Android网络连接判断与处理 -
月光照着我:
写的不错,作为笔记了
Android中LayoutInflater的使用 -
智博王锋:
好文章是要顶的!
Android中LayoutInflater的使用 -
云南白药:
...
Android中LayoutInflater的使用 -
万新one:
理解了许多。解释的不错。3Q.
Android中LayoutInflater的使用
import javax.swing.*; import javax.swing.event.*; public class TestTexts extends JFrame { private JLabel label = new JLabel("Status"); private JTextField textField; private JPasswordField pwdField; private JTextArea textArea; public TestTexts() { super("Test Texts"); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().setLayout(new java.awt.FlowLayout()); textField = new JTextField(15); /* 监听文本光标移动事件 */ textField.addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { // 如果改变了内容,就可以即时更新 label 显示的内容 label.setText(textField.getText()); } }); pwdField = new JPasswordField(15); pwdField.setEchoChar('#'); textArea = new JTextArea(5, 15); textArea.setLineWrap(true); getContentPane().add(textField); getContentPane().add(pwdField); getContentPane().add(textArea); getContentPane().add(label); setSize(200, 200); } public static void main(String[] args) { TestTexts tt = new TestTexts(); tt.show(); } } 上例中,我们构造了一个宽度为 15 个字符的单行文本框 (textField = new JTextField(15);),并使用 addCaretListener 方法添加了一个 CaretListener (textField.addCaretListener ...)。CaretListener 监听文本光标的移动事件。当用户使用键盘、鼠标等移动了文本光标在 JTextField 中的位置时触发这个事件。我们需要重载 caretUpdate(CaretEvent e) 对事件进行处理 (public void caretUpdate(CaretEvent e) ...)。这样,我们可以在这里做类似 VB 中 TextBox 的 OnChange 事件中做的事情。 JTextField 有 5 个构造方法,常用其中的四个: JTextField() JTextField(int columns),如上例 textField = new JTextField(15); JTextField(String text) JTextField(String text, int columns) 其中,参数 text 是单行文本框的初始内容,而 columns 指定了单行文本框的宽度,以字符为单位。JTextField 中的文本内容可以用 getText() 方法获得。也可以用 setText 方法指定 JTextField 中的文本内容。 JPasswordField 是 JTextField 的子类,其构造方法也是类似的。JPasswordField 提供了 setEchoChar(char ch) 方法设置为了隐藏密码而显示的字符,默认为 '*' 字符,上例中则设置为了 '#' 字符 (pwdField.setEchoChar('#');)。与 JTextField 一样,JPasswordField 也用 getText 方法和 setText 获得或者设置文本内容 (当然在用户界面上是隐藏的)。 JTextField 是单行文本框,不能显示多行文本,如果想要显示多行文本,就只好使用多行文本框 JTextArea 了。JTextArea 有六个构造方法,常用的也是四个: JTextArea() JTextArea(int rows, int columns) JTextArea(String text) JTextArea(String text, int rows, int columns) text 为 JTextArea 的初始化文本内容;rows 为 JTextArea 的高度,以行为单位;columns 为 JTextArea 的宽度,以字符为单位。如上例中就构造了一个高 5 行,宽 15 个字符的多行文本框 (textArea = new JTextArea(5, 15);)。 多行文本框默认是不会自动折行的 (不过可以输入回车符换行),我们可以使用 JTextArea 的 setLineWrap 方法设置是否允许自动折行。setLineWrap(true) 是允许自动折行,setLineWrap(false) 则是不允许自动折行。多行文本框会根据用户输入的内容自动扩展大小,不信,自己做个实验——如果不自动折行,那么多行文本框的宽度由最长的一行文字确定的;如果行数据超过了预设的行数,则多行文本框会扩展自身的高度去适应。换句话说,多行文本框不会自动产生滚动条。怎么办?后面讲到滚动窗格 (JScrollPane) 的时候,你就知道了。 多行文本框里文本内容的获得和设置,同样可以使用 getText 和 setText 两个方法来完成。 五. 窗格、滚动窗格和布局管理 窗格 (JPanel) 和滚动窗格 (JScrollPane) 在图形用户界面设计中大量用于各种组件在窗口上的布置和安排。这里所谓的布置和安排,就是布局 (Layout),因此不得不先说说布局。 将加入到容器(通常为窗口等) 的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。布局由布局管理器 (Layout Manager) 来管理。那么,我们在什么时候应该使用布局管理器?应用选择哪种布局管理器?又该怎样使用布局管理器呢? 往往,我们设计一个窗口,其中是要添加若干组件的。为了管理好这些管理的布局,我们就要使用布局管理器。比如说,设计一个简单的编辑器,这个编辑器中只需要放置两个按钮和一个多行文本框。这些组件是让 Java 自己任意安排呢?还是按照一定的位置关系较规范的安排呢?当然应该选择后者。那么,为了按照一定的位置关系安排这些组件,我们就需要用到布局管理器了。 然后我们遇到了一个选择题——使用哪种布局管理器。为此,我们首先要知道有些什么布局管理器,它们的布局特点是什么。常用的布局管理器有: FlowLayout、BorderLayout、GridLayout、BoxLayout 等,其中 FlowLayout 和 BorderLayout 最常用,本文主要也就只谈谈这两种布局管理器。下面列表说明它们的布局特点: 布局管理器 布局特点 FlowLayout 将组件按从左到右从上到下的顺序依次排列,一行不能放完则折到下一行继续放置 BorderLayout 将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件 GridLayout 形似一个无框线的表格,每个单元格中放一个组件 BoxLayout 就像整齐放置的一行或者一列盒子,每个盒子中一个组件 就上述的编辑器为例,如果选用 FlowLayout,那么两个按钮和一个多行文本框就会排列在一行——当然这是窗口足够宽的情况;如果窗口稍窄一些,则可能分两行排列,第一行有两个按钮,而第二行是多行文本框——这是最理想的情况;如果窗口再窄一些,就可能分三行排列,第一行和第二行分别放置一个按钮,第三行放置多行文本框。因此,如果窗口大小可以改变,那么三个组件的位置关系也可能随着窗口大小的变化而变化。所以,FlowLayout 不适用。其实上面所举的例程中,大部分都是用的 FlowLayout,那是因为我们没有要求组件的布局。 如果选用 BorderLayout 的情况又如何呢?我们可以试着加入一个窗格 (JPanel,稍后讲解),并将两个按钮放置在其中,然后将这个窗格加入到 BorderLayout 的北部 (即上部);再将多行文本框加入到 BorderLayout 中部。结果类似使用 FlowLayout 的第二种可能,是最理想的情况。而且,如果改变窗口大小,它们的位置关系仍然是北-中的关系,不会随之改变。 剩下的两种布局管理器,加以窗格 (JPanel) 的配合,也能够很好的安排上述编辑器所需的三个组件。但是由于它们的使用稍为复杂一些,所以就不讲了。下面就讲讲如何使用 FlowLayout 和 BorderLayout。 任何布局管理器,都需要用在容器上,比如 JFrame 的 Content Pane 和下面要说的 JPanel 都是容器。容器组件提供了一个 setLayout 方法,就是用来改变其布局管理器的。默认情况下,JFrame 的 Content Pane 使用的是 BorderLayout,而 JPanel 使用的是 FlowLayout。但不管怎样,我们都可以调用它们的 setLayout 方法来改变其布局管理器。比如上述的编辑器中,我们要让窗口 (JFrame 对象,假设为 frame) 使用 BorderLayout,就可以使用 frame.getContentPane().setLayout(new BorderLayout()); 来改变其布局管理器为一个新的 BorderLayout 对象。 然后,我们对布局管理器的直接操作就结束了,剩下的只需要往容器里添加组件。如果使用 FlowLayout,我们只需要使用容器的 add(Component c) 方法添加组件就行了。但是,如果使用 BorderLayout 就不一样了,因为要指定是把组件添加到哪个区域啊。那我们就使用容器的 add(Component c, Object o) 方法添加组件,该方法的第二个参数就是指明添加到的区域用的。例如,上述编辑器中要添加一个多行文本框到 BorderLayout 的中部,就可以用 frame.getContentPane().add(new JTextArea(5, 15), BorderLayout.CENTER) 来实现。 BorderLayout 的五个区域分别是用下列五个常量来描述的: BorderLayout.EAST 东 BorderLayout.SOUTH 南 BorderLayout.WEST 西 BorderLayout.NORTH 北 BorderLayout.CENTER 中 刚才已经提到了使用 JPanel。JPanel 作为一个容器,可以包容一些组件,然后将这个 JPanel 对象作为一个组件添加到另一个容器 (称作父容器) 中。这个功能有什么好处呢? 上面不是提到 BorderLayout 的一个区域中只能添加一个组件吗?但是我们的编辑器需要添加两个按钮到它的北部,怎么办?上面的例子中,我们就是用的一个 JPanel 包容了这两个按钮,然后再将这个 JPanel 对象作为一个组件添加到设置布局管理器为 BorderLayout 的 Content Pane 中。 上面说到各布局管理器的布局特点的时候,几乎每一种都是一个区域只能添加一个组件,那我们想添加多个组件到一个区域的时候,就要用到 JPanel 了。如果还没有明白,稍后看一段程序可能更易于理解。 而滚动窗格 (JScrollPane) 呢?它是一个能够自己产生滚动条的容器,通常只包容一个组件,并且根据这个组件的大小自动产生滚动条。比如上面讲 JTextArea 的时候提到:JTextAera 会随用户输入的内容自动扩展大小,很容易打破各组件的布局。但是,如果我们将它包容在一个滚动窗格中,它的扩展就不会直接反映在大小的变化上,而会反映在滚动窗格的滚动条上,也就不会打破各组件的布局了。稍后的例子会让你清清楚楚。 是不是等着看例子了?好,例子来了: import javax.swing.*; import java.awt.*; public class TestPanels extends JFrame { public TestPanels() { setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel panel = new JPanel(); for (int i = 0; i < 2; i++) { panel.add(new JButton("Button 00" + i)); } JTextArea textArea = new JTextArea(5, 15); textArea.setLineWrap(true); JScrollPane scrollPane = new JScrollPane(textArea); getContentPane().add(panel, BorderLayout.NORTH); getContentPane().add(scrollPane, BorderLayout.CENTER); pack(); } public static void main(String[] args) { TestPanels tp = new TestPanels(); tp.setVisible(true); } } 这个例子的运行结果如下图,正是我们想要的结果——上面两个按钮,下面是一个可以滚动的多行文本框: 上例中首先产生了一个 JPanel 对象 (JPanel panel = new JPanel();),然后将两个按钮置于其中 (panel.add ...);然后产生了一个多行文本框 (JTextArea textArea = new JTextArea(5, 15);),并使用一个滚动窗格将它包裹起来 (JScrollPane scrollPane = new JScrollPane(textArea);),使之成为可以滚动的多行文本框。最后将两个容器 (JPanel 对象和 JScrollPane 对象) 分别添加到了窗口的北部 (getContentPane().add(panel, BorderLayout.NORTH);) 和中部 (也就是剩余部分,getContentPane().add(scrollPane, BorderLayout.CENTER);)。 好像有点不对劲,是什么呢?对了,我们没有设置 Content Pane 的布局管理器为 BorderLayout 啊,为什么……刚才不是说了吗,JFrame 的 Content Pane 的默认布局管理器就是 BorderLayout,所以不用再设置了。
发表评论
-
Swing中引入Android的NinePatch技术,让Swing拥有Android的外观定制能力
2012-09-21 09:22 1631【摘要】 本文诣在 ... -
JavaSwing实现支持合并拆分的JTable
2010-12-16 15:39 1981GridBagModel:抽象模型接口。该接口用于描述表格中单 ... -
JTable小例子,表格中使用JComboBox下拉按钮
2010-12-16 15:21 5429import java.awt.BorderLayout; ... -
配合滚动面板实现JTable上下翻页的效果
2010-12-16 14:26 3427import java.awt.BorderLayout; ... -
JScrollBar简单演示例子
2010-12-06 19:28 6628import java.awt.*; import java ... -
点击jtable的表头,数据会根据根据表头来排序
2010-12-06 11:47 5143import javax.swing.JFrame; imp ... -
重写JSplitPane的BasicSplitPaneUI
2010-09-18 13:39 1582import java.awt.Color; import ... -
Swing窗口初始最大化的方法
2010-08-20 11:09 79131.设置窗口最大(伪最大化) JFrame frame =n ... -
Tree目录实现拖拽功能演示实例(DragAndDrop)
2010-08-10 16:49 1803import java.awt.BorderLayout; ... -
设置JTextPane指定内容的颜色
2010-05-21 14:29 1373package Assis; import java.a ... -
ScaleImageDemo图像缩小与放大演示
2010-05-12 14:59 2126package Assis; import java.a ... -
TreesDemo
2010-05-04 11:19 1095import java.awt.*; import java ... -
TableDemo
2010-05-04 11:17 1207import javax.swing.JTable; imp ... -
分割面板演示JSplitPaneDemo
2010-05-04 11:12 1400//Java Swing 带分隔条的面板代码 impor ... -
StylesExample8
2010-04-08 12:55 1213import javax.swing.*; import j ... -
StylesExample7
2010-04-08 12:54 1009import javax.swing.*; import j ... -
StylesExample6
2010-04-08 12:52 1073import javax.swing.*; import j ... -
StylesExample5
2010-04-08 12:51 1003import javax.swing.*; import j ... -
StylesExample4
2010-04-08 12:50 1121import javax.swing.*; import j ... -
StylesExample3
2010-04-08 12:50 1014import javax.swing.*; import j ...
相关推荐
《Manning - Swing - 2nd.pdf》是一本针对中级到高级Swing开发者的宝贵资源,它不仅深入浅出地讲解了Swing的核心技术和设计理念,还提供了大量的实用案例和实践经验。无论是对于初学者还是经验丰富的开发者而言,这...
"浅谈Java图形界面事件处理的方法.pdf" Java 语言在图形界面设计中,事件处理是非常重要的一部分。事件处理是指用户与图形用户界面(GUI)之间的交互操作,即当用户触发某一事件时,系统做出的响应,对事件进行...
不必深入研究Swing或Applet等图形界面组件,因为这些在JSP中并不常用。 - **建议**:通过实际项目练习,加深对Java的理解。 ##### 4. 学习JavaScript - **时间**:1~2周 - **目标**:掌握如何使用JavaScript进行...
### 浅谈Java语言评价胜出的8大技术优势 #### 1. 强大的API支持 Java提供了非常丰富的API支持,包括网络编程中的Socket API、数据库操作中的SQL API、图形用户界面的Swing和AWT API等。这些API不仅功能强大而且...
浅谈 Java 的发展及特点[J]. 硅谷, 2010(6):50-50. 2. Burns B. Darkstar: the java game server[J]. 2007. 3. 吴越胜、李新磊.Eclipse 3.0 程序开发技术详解[M]:清华大学出版社,2010.1~3 4. 岷江. Java 的运行...
今天,我们将深入浅谈该问题,并提供两种解决方法:通过使用外部资源文件的方式和通过使用内部资源文件的方式。 问题描述 当我们将 Java 项目打包成 Jar 文件后,发现图片无法加载。这是因为 Jar 文件中的路径问题...
Java的标准库并未内置事件驱动的功能,但在GUI组件如Swing中,有一些基础的事件处理支持。然而,这些并不适用于非GUI应用,因此我们需要自定义一套通用的事件驱动框架。 观察者模式是实现事件驱动的一种常见设计...
"linear"是一种线性过渡,动画速度在整个过程中保持恒定,而"swing"则是非线性的,它模拟了传统的物理摆动,速度在开始和结束时较慢,中间较快,这是jQuery默认的效果。 然而,如果你想要更多的缓动效果,比如...
在Java的Swing图形用户界面(GUI)开发中,布局管理是至关重要的,它负责自动安排组件在容器内的位置和大小。然而,有时开发者可能希望对组件的位置有精确的控制,这时就可以使用“绝对布局”(Absolute Layout)。...
Java Swing中的布局管理器(Layout Manager)负责自动调整和排列容器中的组件。不同类型的布局管理器有其特定的布局规则。当你尝试使用`setBounds()`方法时,必须考虑到当前使用的布局管理器类型。 - **绝对布局...
它是由javax.swing.JTextField类提供的,可以用来创建一个允许用户输入单行文本的控件。文本框的大小通常由其列数来决定,用户可以通过构造函数来设置列数,例如: 1. JTextField() 创建一个默认字符长度为1的...
2. public int getColumnCount():获取表格中的列数。 3. public Object getValueAt(int rowIndex, int columnIndex):获取指定行和列的单元格值。 通过继承 AbstractTableModel 类并实现上述三种抽象方法,我们...
2. `public JLabel(Icon image)`:此构造方法用于创建一个带有指定图标的标签。`Icon`参数可以是一个实现了`Icon`接口的对象,如`ImageIcon`,用于显示图像资源。 3. `public JLabel(String text)`:此构造方法创建...
11.7.2 内建函数apply()、filter()、map()、reduce() 11.7.3 偏函数应用 11.8 变量作用域 11.8.1 全局变量与局部变量 11.8.2 globa语句 11.8.3 作用域的数字 11.8.4 闭包...
纸上得来终觉浅,所以:别问那么多,别想那么多,动手写吧。 JAVA自学之路 四:要事为先 对待人生的任何事情都要:抓大放小,要事为先 对于一个以前从来没有接触过java的人,java无疑是庞大的,似乎每个...