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));

    }

原文地址:https://www.cnblogs.com/fdzang/p/9601010.html

时间: 2024-10-17 13:51:12

Java GUI:将JPanel添加进JScrollPane的相关文章

第14篇-JAVA GUI编程

第14篇-JAVA GUI编程 每篇一句 :道路一开始开辟的时候总是存在障碍的 初学心得: 原本下定决心才能开始的事情也变得理所当然 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ] 1.什么是界面 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 2.Java 基础类 JFC 的基本

java GUI的效果图

import java.awt.*;import javax.swing.*;public class GridBagDemo extends JFrame {    public static void main(String args[]) {        GridBagDemo demo = new GridBagDemo();    }    public GridBagDemo() {        init();        this.setSize(600,600);     

Java GUI 基础 Eight Puzzle (拼图游戏)

很简单使用java GUI 制作一个简单的拼图游戏 // main package HW1; import java.io.IOException; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class HW1 extends JFrame{ /** * */ public HW1_0586(String s

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

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

JAVA GUI 工具

Java GUI图形界面开发工具 上大学那会儿比较主流的Java图形开发插件是:Visual Editor 和 SWT Designer, 不久又出了个Jigloo, 但去官网看了下发现这个东西也很久没有更新了,不过据说短小精悍,五脏俱全.SWT Designer不久前也被Google收购后重新整合进自己的产品中,然后开源了,现在名字叫:WindowBuilder Pro,看上去界面组件很丰富强大的样子,支持Swing, AWT, SWT, 以及Google自家的GWT等等. 目前JAVA图形界

JAVA GUI

JAVA GUI中的事件处理: 委托事件模型:事件源对象和监听器对象具有绑定关系 一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型 设置容器的布局管理器为空白布局管理器时,注意设置组件的位置和大小以免出现组件显示不出来的问题:设置容器的布局管理器为流布局管理器时,下拉列表的输入框设置为可编辑时会默认扩大下拉列表的输入框长度,另外可以通过设置一个字符串内容为空格字符串的标签调整其他组件的位置,特别的对于文本框组件来说可以通过setColumns()方法调整文

JAVA GUI编程学习笔记目录

1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10.JAVA之GUI编程弹出对话框Dialog 11.JAVA之GUI编程菜单 12.JAVA之GUI编程打开与保存文件 13.JAVA之GUI编程将程序打包jar JA

关于Android的硬件抽象层添加进Android系统默认编译的问题

这里主要是遇到两个问题:第一个是,自己编写的hal层源码怎么添加进Android的默认编译中去,也就是说在根目录执行make时,自己编写hal源码也会被编译.第二个问题是,编译完成后还要自动安装在指定的系统目录lib/hw下. 刚开始时不太了解,总是需要使用mmm来进行编译安装,但是打包之后再编译这是不现实的.为此需要添加到默认中去. 一般来说hal层所在的位置在hardware/libhardware/modules目录下.假如我写个led的hal层,那么在modules目录下建立一个led文

Java -GUI开发九九乘法表

Java GUI开发九九乘法表 (1)实现目标: 利用java自带的awt包,基础控件开发一个九九乘法表,点击可以显示对应的乘法口诀. (2)控件选择: 点击--Button 显示--TextField (3)界面设计:总体设计布局 (4)主窗体编写 将程序在屏幕中央区显示 1 /*窗口居中显示*/ 2 int Win_width=fr.getWidth(); 3 int Win_Height=fr.getHeight(); 4 Toolkit kit = Toolkit.getDefaultT