Java GUI:将JPanel添加进JScrollPane
实现的目标:

因为在滚动框中含有很多个Java GUI 组件,因此这里采用JPanel面板包住这些组件,在用JScrollPane实现滚动
问题1:布局揉在一起
JPanel有自己默认的布局方式,因此在这里我们要自己设置流式布局
jPanel_qanda.setLayout(null);
问题2:滚动条未生效
刚开始的时候我是直接设置JPanel的大小 setSize(int width, int height) 不管设置多大,都没有滚动条
最后百度,看到了一个博客:https://www.cnblogs.com/tianguook/archive/2012/03/21/2410807.html
jPanel_qanda.setPreferredSize(new Dimension(800,1000));
滚动条出现!
问题3:组件不显示
PS:今天在写GUI的时候,因为粗心,出现了一个问题:
容器add组件后,运行时不出现,当鼠标移动到目标位置时,组件才浮现出来
原因:setBounds 写在了 add方法的前面去了
贴一下所有代码,自用的,有点乱:
public static void qanda(){
final JFrame frame=menu(new JFrame());
user.setNickname("zs");
user.setRole(1);
List<Qanda> questions=qandaDao.getQuestions();
JButton jButton_ask=new JButton("Ask Question");
frame.add(jButton_ask);
jButton_ask.setBounds(440, 200, 120, 30);
jButton_ask.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});
JPanel jPanel_qanda=new JPanel();
jPanel_qanda.setPreferredSize(new Dimension(800,150*questions.size()));
jPanel_qanda.setLayout(null);
for (int i = 0; i < questions.size(); i++) {
String name=questions.get(i).getName();
String time=questions.get(i).getTime();
String content=questions.get(i).getContent();
JLabel jLabel_name=new JLabel("Name:"+name);
jPanel_qanda.add(jLabel_name);
jLabel_name.setBounds(20, 20+150*i, 60, 20);
JLabel jLabel_time=new JLabel("Time:"+time);
jPanel_qanda.add(jLabel_time);
jLabel_time.setBounds(220, 20+150*i, 160, 20);
JButton jButton_answer=new JButton("Answer");
jPanel_qanda.add(jButton_answer);
jButton_answer.setBounds(420, 20+150*i, 120, 30);
jButton_answer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});
JButton jButton_check=new JButton("Check");
jPanel_qanda.add(jButton_check);
jButton_check.setBounds(620, 20+150*i, 120, 30);
jButton_check.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});
JTextArea jTextArea_content=new JTextArea(content);
jPanel_qanda.add(jTextArea_content);
jTextArea_content.setBounds(20, 50+150*i, 740, 80);
}
JScrollPane jScrollPane_userInfo=new JScrollPane(jPanel_qanda,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(jScrollPane_userInfo);
jScrollPane_userInfo.setBounds(100, 250, 800, 200);
jScrollPane_userInfo.setFont(new Font("Dialog", 0, 20));
}
/**
* 用户信息
*/
public static void userInfo(){
JFrame frame=new JFrame();
user.setNickname("zs");
frame.setSize(1000,600);
frame.setVisible(true);
frame.setResizable(false);
frame.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-400)/2,
(Toolkit.getDefaultToolkit().getScreenSize().height-320)/2);
frame.setTitle("Notice");
frame.setLayout(null);
frame=menu(frame);
List<User> users=userDao.getUsers();
String[][] userInfos=new String[users.size()][4];
for(int i=0;i<users.size();i++){
userInfos[i][0]=users.get(i).getNickname();
userInfos[i][1]=users.get(i).getAccount();
userInfos[i][2]=users.get(i).getEmail();
if(users.get(i).getRole()==0){
userInfos[i][3]="Student";
}else{
userInfos[i][3]="Teacher";
}
}
String[] header=new String[]{"Name","Account","Email","Role"};
JTable jTable_userInfo=new JTable(userInfos,header);
JScrollPane jScrollPane_userInfo=new JScrollPane(jTable_userInfo,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(jScrollPane_userInfo);
jScrollPane_userInfo.setBounds(100, 200, 800, 200);
jScrollPane_userInfo.setFont(new Font("Dialog", 0, 20));
}
Java GUI:将JPanel添加进JScrollPane的更多相关文章
- JAVA GUI学习 - JList列表、JScrollPane滚动条组件学习
/** * 本例结合JList和JScrollPane共同使用 * @author Wfei * */ public class JListKnow extends JFrame { JList jL ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- java GUI的效果图
import java.awt.*;import javax.swing.*; public class GridBagDemo extends JFrame { public static v ...
- 一个关于集合的问题,为什么添加进List集合中的元素被莫名其妙的改变了
以前自己理解的不够深刻,特此记录一下提醒自己,如果正好也帮到了你,我会很开心.相信只有自己正好遇到这个问题,才觉得哦,原来这样.自己小白,大神莫喷 为什么添加进List集合中的元素被莫名其妙的改变了? ...
- Java GUI学习,贪吃蛇小游戏
JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...
- Java GUI 桌面应用开发
前言 虽然现在已经很少项目会涉及GUI技术,但作为一个合格的Java开发工程师,还是得了解才得 本文记录,idea使用JFormDesigner插件进行Java GUI 桌面应用开发 GUI Swin ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- JAVA GUI
JAVA GUI中的事件处理: 委托事件模型:事件源对象和监听器对象具有绑定关系 一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型 设置容器的布局管 ...
- paip.java gui swt/jface 最佳实践
paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...
随机推荐
- MySQL数据库连接报错
数据库版本8.x和其他版本配置有区别: 1. 驱动依赖和连接 报错: Could not create connection to database server - java mysql conne ...
- Mac 达芬奇【Davinci Resolve】 无法添加媒体
参考 : https://zhidao.baidu.com/question/182613491787331404.html 打开软件,点击默认的未命名项目: 点击左上角图中箭头位置: 选中系统-&g ...
- iOS - 小功能 跳转到淘宝或天猫的商品展示详情页
最近做iOS项目的时候遇到一个需求,点击广告页,跳转到淘宝或天猫的商品详情页. 具体需要是这样: 1)安装了淘宝:跳转到淘宝详情页. 2)没装淘宝,装了天猫:跳转到天猫详情页 3)淘宝.天猫都没装:跳 ...
- nginx 开启 gzip 压缩
现在使用vue或react开发的项目越来越多,纯js渲染,导致js体积越来越多,动辄就是几百上千kb,此时可以使用gzip的方式压缩js大小,减少请求时间与流量. 配置: http { gzip on ...
- sql 注入风险
目录 sql 注入风险 什么是sql注入呢? 查看sql注入风险 如何避免 sql 注入风险 pymysql 简单规避注入风险示列 sql 注入风险 什么是sql注入呢? 参考百度 查看sql注入风险 ...
- DDL 操作表结构
DDL 操作表结构:CRUD 一.C(create)创建 1.创建表 create table 表名( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... 列名n 数据类型n ) ...
- Redis数据结构和使用场景,redis内存淘汰策略
什么样的数据适合放入Redis? sql执行耗时特别久,且结果不频繁变动的数据,适合放入Redis. Redis是单线程的,为什么会这么快? 纯内存操作 单线程操作,避免频繁的上下文切换 采用了非阻塞 ...
- SQL SERVER-Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.SmoExtended)
Q:先在一个实例中恢复一个数据A,然后又想在恢复一次,取别名为A2,这是报异常SQL SERVER-Exclusive access could not be obtained because the ...
- hive 外部表和内部表的区别和相互转换
Hive内部表和外部表区别 1.创建内部表时,内部表的数据文件是保存在指定的路径的:如若创建外部表,则只记录数据所在的路径,不会对数据位置做改变. 2.删除表的时候,内部表元数据和数据会跟着一起删除. ...
- [ipsec][crypto] ike/ipsec与tls的认证机制比较
前言 接上篇:[ipsec][crypto] 有点不同的数字证书到底是什么 本篇内容主要是上一篇内容的延伸.抽象的从概念上理解了证书是什么之后,我们接下来 从实践的角度出发,以IKEv2和TLS两个协 ...