Jarrick Chagma wrote:
Is each field in a separate panel? Are there more than 50 panels on the
screen at once? Separate panels and their abundance are the keys.
I put 100 JTextFields each in it's own panel, plus some more panels and
containers for formatting, and I don't see any slowness. You might, and
maybe your needs are more sensitive than what I did, but this seems to
update fine for me.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fubar;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
/**
*
* @author Brenden
*/
public class UpdateTest {
private static final int ROWS = 20;
private static final int COLS = 5;
private final List<JTextField> textFieldList =
new ArrayList<JTextField>( ROWS * COLS );
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
new UpdateTest().createAndShowGui();
}
} );
}
private void createAndShowGui() {
JFrame jframe = new JFrame("Update Test");
Box centralContent = new Box( BoxLayout.PAGE_AXIS );
for( int rows = 0; rows < ROWS; rows++ ) {
JPanel rowPanel = new JPanel();
for( int cols = 0; cols < COLS; cols ++ ) {
JTextField textField = new JTextField( 10 );
textFieldList.add( textField );
rowPanel.add( new JPanel().add( textField ) );
}
centralContent.add( rowPanel );
}
jframe.add( centralContent );
JButton jbut = new JButton( "Update Now" );
jbut.addActionListener( new UpdateListener() );
JPanel bottom = new JPanel();
LayoutManager layout = new FlowLayout( FlowLayout.CENTER );
bottom.setLayout(layout);
bottom.add( jbut );
jframe.add( bottom, BorderLayout.SOUTH );
jframe.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
jframe.pack();
jframe.setLocationRelativeTo( null );
jframe.setVisible( true );
}
private class UpdateListener implements ActionListener {
private int count = 1;
@Override
public void actionPerformed(ActionEvent e) {
String update = "Update" + count;
for (JTextField t : textFieldList ) {
t.setText( update );
}
count++;
}
}
}
multiple panels. Perhaps it's my machine because I also notice a
either.