我有3045的表格!组件(1015个标签,1015个文本字段,1015个组合框).所有这些都在JPanel和JScrollPane中的JPanel中.问题是滚动是“滞后”.我的PC上有4GB RAM,所以我不认为这是问题所在.怎么了?

在我的任务管理器中,应用程序使用~100mb.

我的代码:

final JScrollPane scrollPane_1 = new JScrollPane();

final JPanel panel = new JPanel();

panel.setLayout(null);

scrollPane_1.setViewportView(panel);

int y =0;

for(int i=0; i<1015;i++)

{

JLabel length = new JLabel();

length.setBounds(10, y, 350, 20);

length.setFont(new Font("Tahoma", Font.BOLD, 11));

length.setEnabled(false);

panel.add(length);

panel.revalidate();

JComboBox combo = new JComboBox();

combo.setModel(new DefaultComboBoxModel(new String[] {"=", "!="}));

combo.setBounds(10, y + 20, 70, 20);

panel.add(combo);

panel.revalidate();

JTextField text = new JTextField();

text.setBounds(10 + 80, y + 20, 200, 20);

panel.add(text);

panel.revalidate();

}

编辑:我做了很多测试,我意识到只有当我使用组合框时才存在延迟,如果我使用例如文本字段而不是组合框,滚动是正常的…

解决方法:

使用布局管理器时,您的代码对我来说似乎并不那么迟钝.请测试一下:

import java.awt.Dimension;

import java.awt.Font;

import java.awt.GridLayout;

import javax.swing.*;

public class Foo2 {

protected static final int PREF_W = 400;

protected static final int PREF_H = 400;

public static void main(String[] args) {

final JScrollPane scrollPane_1 = new JScrollPane() {

@Override

public Dimension getPreferredSize() {

return new Dimension(PREF_W, PREF_H);

}

};

final JPanel panel = new JPanel();

panel.setLayout(new GridLayout(0, 1));

scrollPane_1.setViewportView(panel);

for (int i = 0; i < 1015; i++) {

JPanel innerPanel = new JPanel();

innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.LINE_AXIS));

JLabel length = new JLabel("foo");

length.setFont(new Font("Tahoma", Font.BOLD, 11));

length.setEnabled(false);

innerPanel.add(length);

innerPanel.add(Box.createHorizontalGlue());

JComboBox combo = new JComboBox();

combo.setPrototypeDisplayValue(" ");

combo.setModel(new DefaultComboBoxModel(new String[] { "=", "!=" }));

combo.setMaximumSize(combo.getPreferredSize());

innerPanel.add(combo);

JTextField text = new JTextField(10);

JPanel textWrapper = new JPanel();

textWrapper.add(text);

innerPanel.add(textWrapper);

panel.add(innerPanel);

}

JFrame frame = new JFrame();

frame.add(scrollPane_1);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

}

编辑

相反,使用JTable怎么样?

import java.awt.Dimension;

import java.awt.GridLayout;

import javax.swing.*;

import javax.swing.table.DefaultTableModel;

public class Foo3 {

protected static final int PREF_W = 400;

protected static final int PREF_H = 400;

public static void main(String[] args) {

final JScrollPane scrollPane_1 = new JScrollPane() {

@Override

public Dimension getPreferredSize() {

return new Dimension(PREF_W, PREF_H);

}

};

String[] columnNames = {"Foo", "Bar", "Baz"};

String[][] data = new String[1015][3];

for (int i = 0; i < data.length; i++) {

data[i] = new String[]{"foo", "==", ""};

}

DefaultTableModel model = new DefaultTableModel(data, columnNames){

@Override

public boolean isCellEditable(int row, int column) {

return (column != 0);

}

};

JTable table = new JTable(model);

table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(

new JComboBox(new String[]{"==", "!="})));

final JPanel panel = new JPanel();

panel.setLayout(new GridLayout(0, 1));

scrollPane_1.setViewportView(table);

JFrame frame = new JFrame();

frame.add(scrollPane_1);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

}

标签:java,performance,swing,jscrollpane

来源: https://codeday.me/bug/20190728/1567100.html

java怎么设有滚动的标签_java – JScrollPane’laggy’滚动,包含许多组件相关推荐

  1. java注释是用什么标签_java的注释标签是什么?

    java的注释标签是什么? 发布时间:2020-05-23 15:22:41 来源:亿速云 阅读:112 作者:鸽子 注释是一门语言的重要组成成分,比如C语言,HTML语言,PHP语言,他们都有自己的 ...

  2. java+循环的时候用标签_java中循环标签的使用

    标签: 以前不知道在循环中可以使用标签.最近遇到后,举得还是有其独特的用处的.我这么说的意思是说标签在循环中可以改变循环执行的流程.而这种改变不是我们以前单独使用break或者是continue能够达 ...

  3. java怎么设有滚动的标签,html标签overflow属性和javascript实现div标签滚动

    原标题:html标签overflow属性和javascript实现div标签滚动 昨天一个朋友说他实现了一个div循环滚动显示的demo,但是弄到jsp中就不滚动了,而且debug测试div的scro ...

  4. java foreach标签_Java中Velocity foreach循环标签详解

    Java中Velocity foreach循环标签详解 Java Velocity中foreach循环可以很容易的遍历数组或者集合. 定义 #foreach( $elem in $allElems) ...

  5. java设计图形界面的基本思路_java图形界面之布局设计

    在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: •FlowLayout ...

  6. Java GUI:将JPanel添加进JScrollPane

    实现的目标: 因为在滚动框中含有很多个Java GUI 组件,因此这里采用JPanel面板包住这些组件,在用JScrollPane实现滚动 问题1:布局揉在一起 JPanel有自己默认的布局方式,因此 ...

  7. java常问的报错_java常见报错及解决

    Java常见报错信息: Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:E ...

  8. JavaSwing_3.2: JScrollPane(滚动面板)

    本文链接: http://blog.csdn.net/xietansheng/article/details/74366495 Java Swing 图形界面开发(目录) 1. 概述 官方JavaDo ...

  9. java中table是什么标签_[Java教程]javascript格式化table标签内容

    [Java教程]javascript格式化table标签内容 0 2015-07-12 20:00:08 项目中遇到这样的需求,一大段文章正文的html代码在手机中显示不全,原因是由于其它有table ...

最新文章

  1. iOS开发工具——网络封包分析工具Charles
  2. wcf高并发 mysql_使用nginx搭建高可用,高并发的wcf集群
  3. JVM 核心技术 调优分析与面试经验
  4. 苹果开发者_苹果,你的开发者文档写得烂透了
  5. win10部署webservice网站的步骤
  6. NLP之路-warm up
  7. MySQL主从复制原理(原理+实操)
  8. 解决只能滑动弹框内容不能滑动弹框底层内容
  9. estore商城案例(一)------用户注册邮件激活(上)
  10. 设计链表python(leetcode707)
  11. python数字转换英文26字母_用python实现英文字母和相应序数转换的方法
  12. job title 总汇
  13. 盘点2014:10个词让你看懂今年的移动互联网
  14. 单词Demantoite翠榴石demantoite英语
  15. ECAM6--变量与函数
  16. [读书笔记]How to Get the Most of Studying
  17. 网络营销理论研究:网络营销信息传递原理及其实践价值
  18. 对于刚入行的Android程序员来说,找Android培训机构应该注意哪些方面?
  19. Power BI 2021日历表DAX代码
  20. AutoCAD Mechanical v2022.1.2 CAD机械版简体中文精简直装版

热门文章

  1. oracle中的||是什么意思
  2. web---盒子模型
  3. MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名
  4. springboot项目实现人脸对比
  5. Microbiome |鸡胃肠道真菌群落的时空变化和演替
  6. 邮件服务器篇:三大邮件服务器软件“华山论剑”
  7. 以太坊合并 你需知道的10个问题
  8. ZoomEye-python工具使用详解
  9. HDU 6446 Tree and Permutation (dp)
  10. 汽车研发生产中的三大样车:A样、B样和C样