Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 swing订单速度问题_Java_Performance_Swing_Border_Jtextpane - Fatal编程技术网

java swing订单速度问题

java swing订单速度问题,java,performance,swing,border,jtextpane,Java,Performance,Swing,Border,Jtextpane,我对设置边界的“速度”有问题。我有一个带有多个JTextPane(大约450个,这是必需的)的显示器,它们经常更新(取决于用户输入)。 以下是设置边框功能: private void setBorder(int top, int left, int bottom, int right, Color color) { Args.checkForNull(color); this.setBorder(BorderFactory.createMatteB

我对设置边界的“速度”有问题。我有一个带有多个JTextPane(大约450个,这是必需的)的显示器,它们经常更新(取决于用户输入)。 以下是设置边框功能:

    private void setBorder(int top, int left, int bottom, int right, Color color)
    {
        Args.checkForNull(color);
        this.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, color));
    }
你能给我一些提示吗,如何提高换边的速度?? 我指的是这部分:

this.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, color));
比如:

tmp = this.getStyledDocument();
        this.setDocument(blank);
        if(onOff){
            tmp.setParagraphAttributes(0, tmp.getLength(), underlinedAttr, false);
        }
        else{
            tmp.setParagraphAttributes(0, tmp.getLength(), notUnderlinedAttr, false);
        }

        this.setDocument(tmp);

谢谢

这对我来说运行速度可以接受,因此您的问题不太可能正常()。 更好的衡量方法是,可能的问题是您在单独的事件中更新边框,或者有一个非常复杂的布局。 可能是您的视频卡(驱动程序)不好,您可以尝试查看使用
-Dsun.java2d.d3d=false运行是否更好

import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Random;
import javax.swing.*;

public class TestBorderSpeed {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                int amount = 22;

                final JPanel panel = new JPanel(new GridLayout(amount, amount));
                for (int row = 0; row < amount; row++) {
                    for (int column = 0; column < amount; column++) {
                        JTextPane pane = new JTextPane();
                        pane.setText("Row " + row + "; Column " + column);
                        panel.add(pane);
                    }
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                frame.getContentPane().add(panel);
                frame.getContentPane().add(new JButton(
                  new AbstractAction("Change borders") {

                    private final Random random = new Random();
                    private final Color[] colors =
                      { Color.RED, Color.GREEN, Color.BLUE };

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        for (Component component : panel.getComponents()) {
                            ((JComponent) component).setBorder(
                              BorderFactory.createMatteBorder(
                                    random.nextInt(3) + 1, random.nextInt(3) + 1,
                                    random.nextInt(3) + 1, random.nextInt(3) + 1,
                                    colors[random.nextInt(colors.length)]));
                        }
                    }
                }), BorderLayout.PAGE_END);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}
import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.util.Random;
导入javax.swing.*;
公共类测试边界速度{
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
整数金额=22;
最终JPanel面板=新JPanel(新网格布局(数量、数量));
对于(int row=0;row
经常更新文本字段(和边框)是什么意思?通常为每个GUI组件设置一次边界就足够了(通常在构建时)。。如何将450个文本窗格塞进一个GUI?听起来很“拥挤”。确保你打电话使其失效并重新绘制,以鼓励用户界面更新“我不知道为什么这应该很重要。”我不知道你为什么找不到shift键和拼写检查器。至于我为什么问这些问题,是为了尽力提供最好的帮助。停止关注你想做什么,对“为什么”更坦率一点,以获得最佳帮助。找出你每次调用
setboorder()
是否都会导致调用
paint()
,以及调用哪个组件。也许每次你只为一个精确的组件设置边框时,你所有的450个组件都会被重新绘制。哈哈。干得好。但我并没有提高性能:(速度很快。大约0.6秒左右,但是如果用户执行了更改边框的操作,也会执行更多的操作。因此,在我的应用程序中,总时间大约为1秒。所有其他内容都进行了大量优化。最后一件事是边框。我不认为我的图形卡有问题,因为我已经测试过了。)它也在另一台电脑上。在这台linux电脑上的性能甚至是值得的。这就是我为什么要尝试优化这些东西的原因,因为在linux上执行它需要foreverIt,在我的电脑上不到50毫秒。你能显示VisualVM CPU采样器或分析器的快照吗?我收到一封电子邮件,项目被取消了-但谢谢。