Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比JTable更高效的对象_Java_Performance_Swing_Jtable_Defaulttablemodel - Fatal编程技术网

Java 比JTable更高效的对象

Java 比JTable更高效的对象,java,performance,swing,jtable,defaulttablemodel,Java,Performance,Swing,Jtable,Defaulttablemodel,我想创建数据库的可视化。这是一个完整的桌面应用程序,它看起来类似于Excel。当我在JTable数据库可视化中放入100行(每行有6列)时,应用程序正在崩溃。有更好的班级来完成这样的任务吗?还是其他更聪明的方法 我就是这样做的: import PodklasyInterfejsu.Menu; import javax.swing.*; import java.awt.*; public class OknoGlowne extends JFrame { public Okno

我想创建数据库的可视化。这是一个完整的桌面应用程序,它看起来类似于Excel。当我在JTable数据库可视化中放入100行(每行有6列)时,应用程序正在崩溃。有更好的班级来完成这样的任务吗?还是其他更聪明的方法

我就是这样做的:

import PodklasyInterfejsu.Menu;
import javax.swing.*;
import java.awt.*;

public class OknoGlowne extends JFrame 
{    
    public Okno() 
    {
        // ustawienie rozmiaru okna na 100% 
        JFrame Okno = new JFrame(); 

        Okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Okno.setTitle("Archiwum Stomatologiczne");


        Toolkit zestaw = Toolkit.getDefaultToolkit();
        Dimension rozmiarEkranu = zestaw.getScreenSize();
        int wysEkranu = rozmiarEkranu.height;
        int szerEkranu = rozmiarEkranu.width;
        Okno.setSize(szerEkranu, wysEkranu - 60);                              


        Container powZawartosci = getContentPane();

        // Panel Górnego Menu:
        Menu GorneMenu = new Menu();
        Okno.setJMenuBar(GorneMenu);

        // Wizualizacja bazy w tabeli:

        JTable tabela = new JTable(komorki, nazwyKolumn);
        tabela.setAutoCreateRowSorter(true);
        Okno.add(new JScrollPane(tabela), BorderLayout.CENTER);

        Okno.setVisible(true);

    }
        private Object[][] komorki = new Object [10][];
        private String[] nazwyKolumn = {"Nazwisko", "Imię", "Pesel", "Płeć", "Data urodzenia", "Adres", "Kontakt"};
}

正如其他人提到的:您是否尝试过评测?我个人对JProfiler有很好的经验

虽然我们还不知道
JTable
是否是实际问题,但我在
JXTable
s(注意:SwingX版本的
JTable
)与大型
TableModel
s的组合中遇到了性能问题,在绘制之前,该表将迭代所有元素以确定列的大小


通过为每列设置原型值(使用
tableColumnText#setPrototypeValue
)解决了这个问题。我不确定常规的
JTable
是否也包含此逻辑,但可能值得尝试将
JTable
替换为
JXTable
,并设置原型。

如其他人所述:您尝试过评测吗?我个人对JProfiler有很好的经验

虽然我们还不知道
JTable
是否是实际问题,但我在
JXTable
s(注意:SwingX版本的
JTable
)与大型
TableModel
s的组合中遇到了性能问题,在绘制之前,该表将迭代所有元素以确定列的大小


通过为每列设置原型值(使用
tableColumnText#setPrototypeValue
)解决了这个问题。我不确定常规的
JTable
是否也包含此逻辑,但可能值得尝试用
JXTable
替换
JTable
,并设置原型。

上面代码中的一个问题是,您的数据2-d对象[10][]数组komorki与列字符串[]数组nazwyKolumn不匹配。您有7列,需要7作为对象数组的第一个数组索引。考虑改变这一点:

private Object[][] komorki = new Object[10][];
private String[] nazwyKolumn = { "Nazwisko", "Imię", "Pesel", "Płeć",
     "Data urodzenia", "Adres", "Kontakt" };
为此:

// !! private Object[][] komorki = new Object[10][];
private Object[][] komorki = new Object[10][7]; //!!
private String[] nazwyKolumn = { "Nazwisko", "Imię", "Pesel", "Płeć",
     "Data urodzenia", "Adres", "Kontakt" };

首先。

上面代码中的一个问题是,数据二维对象[10][]数组komorki与列字符串[]数组nazwyKolumn不匹配。您有7列,需要7作为对象数组的第一个数组索引。考虑改变这一点:

private Object[][] komorki = new Object[10][];
private String[] nazwyKolumn = { "Nazwisko", "Imię", "Pesel", "Płeć",
     "Data urodzenia", "Adres", "Kontakt" };
为此:

// !! private Object[][] komorki = new Object[10][];
private Object[][] komorki = new Object[10][7]; //!!
private String[] nazwyKolumn = { "Nazwisko", "Imię", "Pesel", "Płeć",
     "Data urodzenia", "Adres", "Kontakt" };


首先。

我已经有了数千行的JTables,但没有任何性能影响。您使用的是您自己的TableModel还是JTable附带的DefaultTableModel?这场演出的高潮在哪里?画桌子?你说撞倒是什么意思?例外?一个只容纳100行的JTable不会有问题!你确定不是你的模型出了问题吗?好吧,是时候直截了当了:发布的代码乱七八糟,不比这更糟,乱七八糟,名称混乱,构造函数名称与类名不同,变量未声明,。。。我可以继续说下去。请不要浪费我们的时间发布这么糟糕的代码。发布真实代码。如果问题是线程问题,请在代码中随意添加以下断言语句:assert SwingUtilities.isEventDispatchThread();(确保在运行java程序时使用“-ea”作为VM参数,这样就不会忽略断言。这是错误的,而且非常容易混淆。如果使用
OknoGlowne.myMethod()这是在OknoGlowne类上调用的静态方法还是在OknoGlowne变量上调用的实例方法?我们应该怎么知道?编译器和JVM应该怎么知道?我已经有了数千行的JTables,但没有性能影响。您是使用自己的TableModel还是JTable附带的DefaultTableModel?性能的下降是从哪里来的?表的绘制?你说崩溃是什么意思?异常?一个只包含100行的JTable不会有问题!你确定不是你的模型有问题吗?好吧,是时候直截了当了:发布的代码是一团乱麻,没有比这更糟的了,它是一团乱麻,名称混乱,构造函数名称不同从类名、未声明的变量…我可以继续下去。请不要浪费我们的时间发布这么糟糕的代码。发布真实的代码。如果问题是线程问题,请在代码中随意添加以下断言语句:assert SwingUtilities.isEventDispatchThread();(确保使用“-ea”运行java程序)因为你的VM参数,所以断言不会被忽略。这是错误的,而且非常混乱。如果你有
OknoGlowne.myMethod()这是在OknoGlowne类上调用的静态方法还是在OknoGlowne变量上调用的实例方法?我们应该怎么知道?编译器和JVM应该怎么知道?是的!这是答案,我错过了。在稍作修改后,它的工作原理是:private Object[][]komorki=new Object[100][7]+1点不错。另请看;它很少需要,但很容易知道。@trashgod虽然是一篇很好的文章,但它唯一能说明的是,tweaking painting等人并没有给你买任何东西(除了未来的痛苦;-)即使是作者之一Scotty也承认(尽管在java.net上找不到相应的论坛帖子)@克列奥帕特拉:同意;它既是一个警示故事,又是一个指南。是的!这是答案,我错过了。经过一点修改后,它的工作原理是:private Object[]komorki=new Object[100][7]+1点不错。另请看;它很少需要,但很容易知道。@trashgod虽然是一篇很好的文章,但它唯一能说明的是,tweaking painting等人并没有给你买任何东西(除了未来的痛苦;-)即使是作者之一Scotty也承认(尽管在java.net上找不到相应的论坛帖子)@克利奥帕特拉:同意;这既是一个警示故事,也是一个指南。