Java Swing如何实现点击JButton后显示JTextArea
实现点击按钮后显示JTextArea并展示大学信息的解决方案
要实现点击按钮后才显示JTextArea的效果,核心逻辑是初始化时隐藏JTextArea,在按钮点击事件中设置对应大学内容后再将其显示并刷新界面,修改后的完整可运行代码如下:
package toolBar; import javax.swing.*; import java.awt.*; public class ToolBar extends JFrame { JButton uni1=new JButton("Hasheimte University"); JButton uni2=new JButton("The University of Jordan"); JButton uni3=new JButton("German Jordanian University"); JButton exit=new JButton("Close"); JToolBar tb = new JToolBar(); // 文本区外层套滚动面板,内容过多时可滚动查看 JScrollPane textScrollPane; JTextArea text = new JTextArea(); public ToolBar(){ setTitle("Jordanian universities"); setSize(600,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 改用BorderLayout布局,工具栏放顶部、文本区放中间,布局更合理 setLayout(new BorderLayout()); // 配置工具栏 add(tb, BorderLayout.NORTH); tb.add(uni1); tb.add(uni2); tb.add(uni3); tb.add(exit); tb.setFloatable(false); // 初始状态下文本区设置为不可见 text.setLineWrap(true); text.setWrapStyleWord(true); textScrollPane = new JScrollPane(text); textScrollPane.setVisible(false); add(textScrollPane, BorderLayout.CENTER); // 哈希姆大学按钮点击事件 uni1.addActionListener(e ->{ text.setText("哈希姆大学(Hasheimte University)相关信息:\n成立于1995年,位于约旦扎尔卡省,是约旦知名公立综合大学,下设十余个学院,在医学、工程、人文社科等领域具备较强科研实力。"); textScrollPane.setVisible(true); // 刷新界面保证组件正常渲染 revalidate(); repaint(); }); // 约旦大学按钮点击事件 uni2.addActionListener(e ->{ text.setText("约旦大学(The University of Jordan)相关信息:\n成立于1962年,是约旦历史最悠久、规模最大的公立综合大学,坐落于首都安曼,是约旦高等教育体系的核心机构,学科覆盖全面,在中东地区享有较高学术声誉。"); textScrollPane.setVisible(true); revalidate(); repaint(); }); // 德约旦大学按钮点击事件 uni3.addActionListener(e ->{ text.setText("德国约旦大学(German Jordanian University)相关信息:\n成立于2005年,是约旦与德国合作创办的公立大学,采用德国应用技术类高等教育培养模式,侧重实践型人才输出,在工程、信息技术、工商管理等领域优势突出。"); textScrollPane.setVisible(true); revalidate(); repaint(); }); exit.addActionListener(e -> { dispose(); }); // 所有组件配置完成后再显示窗口,避免组件加载不全的问题 setVisible(true); } public static void main(String[] args) { new ToolBar(); } }
核心修改说明
- 移除了原代码中冗余的
JFrame frame成员变量,当前类本身继承了JFrame,无需额外创建窗口实例 - 给JTextArea外层套了JScrollPane组件,解决文本内容过多时无法完整查看的问题,初始化阶段将滚动面板设置为不可见
- 将原FlowLayout布局替换为BorderLayout,工具栏固定在窗口顶部,文本区占满剩余窗口空间,符合常规工具类软件的布局逻辑
- 每个大学按钮的点击事件中,先给文本区填充对应大学的信息,再将滚动面板设置为可见,最后调用
revalidate()和repaint()方法刷新界面,保证文本区正常渲染 - 将
setVisible()方法的调用移到构造方法末尾,避免窗口先显示、后加载组件导致的渲染异常问题
内容的提问来源于stack exchange,提问作者Hussein M Malkawi
相关产品推荐
相关产品推荐

