使用用户指定的计时器更新gui中的JPanel和属性?

所以我有这门课。 我们称之为ProcessBox。 我有另一个名为Process的类,它有一个ProcessBox作为成员变量。 然后,在我的main方法中,我有一个Process对象的ArrayList(每个都有自己的ProcessBox)。 我将如何制作它以便我的ProcessBox每x ms更新一次(其中x是用户指定的。我已经有了输入x的监听器)。 下面是我的ProcessBox类。 这是我希望每x毫秒重绘一次(除了它们的整个列表)。

import java.awt.*; import javax.swing.*; import javax.swing.border.LineBorder; import java.util.*; public class ProcessBox extends JPanel { GridBagLayout gbc_panel; public ProcessBox(Process p) { super(new GridBagLayout()); gbc_panel = new GridBagLayout(); gbc_panel.columnWidths = new int[] { 0, 0, 0 }; gbc_panel.rowHeights = new int[] { 0, 0, 0, 0, 0, 0 }; gbc_panel.columnWeights = new double[] { 0, 0, Double.MIN_VALUE }; gbc_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; super.setLayout(gbc_panel); setPreferredSize(new Dimension(110, 110)); setMinimumSize(new Dimension(110, 110)); setAlignmentX(Component.LEFT_ALIGNMENT); setBorder(new LineBorder(new Color(0, 0, 0), 1)); setSize(new Dimension(110, 110)); String name = p.getName(); int priority = p.getPriority(); int minPriority = p.getMinPriority(); ArrayList times = p.getTime(); Random r = new Random(System.currentTimeMillis()); setBackground(new Color(r.nextInt(255 - 210) + 210, r.nextInt(255 - 210) + 210, r.nextInt(255 - 210) + 210)); JLabel lblNewLabel = new JLabel("ID:"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.gridheight = 2; gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 0; add(lblNewLabel, gbc_lblNewLabel); JLabel lblNewLabel_1 = new JLabel(name); GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints(); gbc_lblNewLabel_1.gridheight = 2; gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 0); gbc_lblNewLabel_1.gridx = 1; gbc_lblNewLabel_1.gridy = 0; add(lblNewLabel_1, gbc_lblNewLabel_1); JLabel lblNewLabel_2 = new JLabel("Priority:"); GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints(); gbc_lblNewLabel_2.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_2.gridx = 0; gbc_lblNewLabel_2.gridy = 2; add(lblNewLabel_2, gbc_lblNewLabel_2); JLabel lblNum = new JLabel(Integer.toString(priority)); GridBagConstraints gbc_lblNum = new GridBagConstraints(); gbc_lblNum.insets = new Insets(0, 0, 5, 0); gbc_lblNum.gridx = 1; gbc_lblNum.gridy = 2; add(lblNum, gbc_lblNum); JLabel lblNewLabel_3 = new JLabel("Min:"); GridBagConstraints gbc_lblNewLabel_3 = new GridBagConstraints(); gbc_lblNewLabel_3.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_3.gridx = 0; gbc_lblNewLabel_3.gridy = 3; add(lblNewLabel_3, gbc_lblNewLabel_3); JLabel lblMp = new JLabel(Integer.toString(minPriority)); GridBagConstraints gbc_lblMp = new GridBagConstraints(); gbc_lblMp.insets = new Insets(0, 0, 5, 0); gbc_lblMp.gridx = 1; gbc_lblMp.gridy = 3; add(lblMp, gbc_lblMp); JLabel lblTimeSlice = new JLabel("Slice:"); GridBagConstraints gbc_lblTimeSlice = new GridBagConstraints(); gbc_lblTimeSlice.insets = new Insets(0, 0, 0, 5); gbc_lblTimeSlice.gridx = 0; gbc_lblTimeSlice.gridy = 4; add(lblTimeSlice, gbc_lblTimeSlice); JLabel lblLeft = new JLabel(Integer.toString(times.get(0))); GridBagConstraints gbc_lblLeft = new GridBagConstraints(); gbc_lblLeft.gridx = 1; gbc_lblLeft.gridy = 4; add(lblLeft, gbc_lblLeft); setVisible(true); } 

}

如何使用Swing Timers开始 ,查看示例 ,例如MarqueeTestAnimationTest