我对设置边框的“速度”有疑问。我有一个显示多个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);
谢谢!
答案 0 :(得分:3)
这对我来说速度很快,所以你的问题不太可能出现在setBorder()中。
更好的衡量,可能的问题是你在单独的事件中更新边框或具有非常复杂的布局。
可能是你有一个糟糕的视频卡(驱动程序),你可以尝试看看与-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);
}
});
}
}