java swing订单速度问题
我对设置边界的“速度”有问题。我有一个带有多个JTextPane(大约450个,这是必需的)的显示器,它们经常更新(取决于用户输入)。 以下是设置边框功能: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
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采样器或分析器的快照吗?我收到一封电子邮件,项目被取消了-但谢谢。