实现的目标:

因为在滚动框中含有很多个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的更多相关文章

  1. JAVA GUI学习 - JList列表、JScrollPane滚动条组件学习

    /** * 本例结合JList和JScrollPane共同使用 * @author Wfei * */ public class JListKnow extends JFrame { JList jL ...

  2. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  3. java GUI的效果图

    import java.awt.*;import javax.swing.*; public class GridBagDemo extends JFrame {    public static v ...

  4. 一个关于集合的问题,为什么添加进List集合中的元素被莫名其妙的改变了

    以前自己理解的不够深刻,特此记录一下提醒自己,如果正好也帮到了你,我会很开心.相信只有自己正好遇到这个问题,才觉得哦,原来这样.自己小白,大神莫喷 为什么添加进List集合中的元素被莫名其妙的改变了? ...

  5. Java GUI学习,贪吃蛇小游戏

    JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...

  6. Java GUI 桌面应用开发

    前言 虽然现在已经很少项目会涉及GUI技术,但作为一个合格的Java开发工程师,还是得了解才得 本文记录,idea使用JFormDesigner插件进行Java GUI 桌面应用开发 GUI Swin ...

  7. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  8. JAVA GUI

    JAVA GUI中的事件处理:   委托事件模型:事件源对象和监听器对象具有绑定关系   一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型   设置容器的布局管 ...

  9. paip.java gui swt/jface 最佳实践

    paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...

随机推荐

  1. 使用jQuery开发tab选项卡插件

    为了复习巩固jQuery的插件开发.HTML和CSS方面的知识,做了一个简单的tab选项卡插件,简单记录一下开发.使用的过程,以备日后使用. 一.插件效果 tab选项卡插件常用的功能均已实现,包括:动 ...

  2. Java调用WebService方法总结(5)--Axis2调用WebService

    Axis2是新一点Axis,基于新的体系结构进行了全新编写,有更强的灵活性并可扩展到新的体系结构.文中demo所使用到的软件版本:Java 1.8.0_191.Axis2 1.7.9. 1.准备 参考 ...

  3. 【洛谷 P4254】 [JSOI2008]Blue Mary开公司(李超线段树)

    题目链接 其实这东西很好懂的..用来维护一次函数. 每个结点存一个值,表示x=这个区间的mid时值最大的函数的编号. 把插入线段的斜率和当前结点的斜率和大小比较来更新左右儿子的值. 查询是实际上是查询 ...

  4. 过滤器+用session验证是否登陆过

    过滤器: public class MyActionFilter : ActionFilterAttribute//继承ActionFilterAttribute类 { public override ...

  5. JavaScript基础,Cookies,Sessions

    php和JavaScript,掌握JavaScript基础,自定义函数,流程控制语句,事件,调用JavaScript脚本,在PHP中使用JavaScript. JavaScript是网景公司开发的,是 ...

  6. git rebase 版本。。变基

    git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态.要搞清楚这个东西,要先看看版本库状态切换的两种情况: 我们知道,在某个分支上,我们可以通过git ...

  7. svn: local unversioned, incoming file add upon update

    svn 文件冲突: D C 文件名 > local unversioned, incoming file add upon update svn revert 文件名 提示: 已恢复“文件名” ...

  8. Kotlin对象表达式深入解析

    嵌套类与内部类巩固: 在上一次https://www.cnblogs.com/webor2006/p/11333101.html学到了Kotlin的嵌套类与内部类,回顾一下: 而对于嵌套类: 归根结底 ...

  9. .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性

    了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...

  10. markdown种嵌入html标签,实现自定义样式

    转:https://www.cnblogs.com/buwuliao/p/9578918.html -------------------------------------------------- ...