Swing Java在间隔后显示组件
我有一个JC组件列表,每个组件都有一个可见性时间。我必须从列表中选择每个组件,使用摆动计时器,在指定的可见性时间内显示它,然后从面板中删除显示的组件,从列表中取出下一个组件并显示,等等。在特定时间,我应该只显示一个组件。请帮忙Swing Java在间隔后显示组件,swing,Swing,我有一个JC组件列表,每个组件都有一个可见性时间。我必须从列表中选择每个组件,使用摆动计时器,在指定的可见性时间内显示它,然后从面板中删除显示的组件,从列表中取出下一个组件并显示,等等。在特定时间,我应该只显示一个组件。请帮忙 testList.add(new JLabel()); testList.add(new JButton()); java.util.Timer timer; TimerTask task; for (Iterator<&g
testList.add(new JLabel());
testList.add(new JButton());
java.util.Timer timer;
TimerTask task;
for (Iterator<> it = testList.iterator(); it.hasNext(); ) {
final JComponent comp= it.next();
comp.setSize(new Dimension(200, 200));
for(int index=0; index==getComponents().length;index++) {
if(getComponents().length==0)
add(not.getComponent(), BorderLayout.CENTER);
}
timer= new java.util.Timer();
task= new TimerTask() {
public void run() {
validate();
try {
remove(comp);
} catch (Exception e) {
e.printStackTrace();
}
validate();
repaint();
}
};
timer.schedule( task ,30*1000);
it.remove();
}
testList.add(newjlabel());
add(newjbutton());
java.util.Timer;
时间任务;
for(Iterator it=testList.Iterator();it.hasNext();){
final JComponent comp=it.next();
组件设置尺寸(新尺寸(200200));
对于(int index=0;index==getComponents().length;index++){
如果(getComponents().length==0)
添加(非.getComponent(),BorderLayout.CENTER);
}
timer=newjava.util.timer();
任务=新时间任务(){
公开募捐{
验证();
试一试{
移除(comp);
}捕获(例外e){
e、 printStackTrace();
}
验证();
重新油漆();
}
};
定时器。时间表(任务,30*1000);
it.remove();
}
例如,您可以这样做:
private static int current = 0;
public static void main ( String[] args )
{
final List<Component> components = new ArrayList<Component> ();
components.add ( new JButton ( "Button" ) );
components.add ( new JToggleButton ( "Toggle" ) );
components.add ( new JLabel ( "Label" ) );
components.add ( new JCheckBox ( "Check" ) );
components.add ( new JRadioButton ( "Radio" ) );
final JPanel panel = new JPanel ();
panel.setBorder ( BorderFactory.createEmptyBorder ( 50, 50, 50, 50 ) );
panel.add ( components.get ( current ) );
JFrame frame = new JFrame ();
frame.add ( panel );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
new Timer ( 2000, new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
current = current < components.size () - 1 ? current + 1 : 0;
panel.removeAll ();
panel.add ( components.get ( current ) );
panel.revalidate ();
panel.repaint ();
}
} ).start ();
}
或:
视情况而定
这不是必需的,但强烈建议使用,因为Swing不是线程安全的,以后应用程序将扩展时,您可能会遇到很多问题。您可以这样做,例如:
private static int current = 0;
public static void main ( String[] args )
{
final List<Component> components = new ArrayList<Component> ();
components.add ( new JButton ( "Button" ) );
components.add ( new JToggleButton ( "Toggle" ) );
components.add ( new JLabel ( "Label" ) );
components.add ( new JCheckBox ( "Check" ) );
components.add ( new JRadioButton ( "Radio" ) );
final JPanel panel = new JPanel ();
panel.setBorder ( BorderFactory.createEmptyBorder ( 50, 50, 50, 50 ) );
panel.add ( components.get ( current ) );
JFrame frame = new JFrame ();
frame.add ( panel );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
new Timer ( 2000, new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
current = current < components.size () - 1 ? current + 1 : 0;
panel.removeAll ();
panel.add ( components.get ( current ) );
panel.revalidate ();
panel.repaint ();
}
} ).start ();
}
或:
视情况而定
这不是必需的,但强烈建议使用,因为Swing不是线程安全的,而且以后应用程序将扩展时,您可能会遇到很多问题。尝试一下这段代码,这样做可以满足您的需要吗:-)
import java.awt.*;
导入java.awt.event.*;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.*;
导入javax.swing.event.*;
公共类ListAndTimer
{
私人按钮;
私人JToggleButton toggleButton;
私人标签;
私人JCheckBox-cbox;
私人JRadioButton rbbutton;
私有对象[]数据;
私人JList myList;
私有列表组件;
私有JComponent组件;
私有JPanel内容窗格;
私人定时器;
公共列表和计时器()
{
contentPane=newjpanel();
按钮=新的JButton(“按钮”);
按钮。设置名称(“2”);
toggleButton=新的JToggleButton(“切换按钮”);
toggleButton.setName(“3”);
标签=新的JLabel(“标签”);
label.setName(“4”);
cbox=新的JCheckBox(“复选框”,false);
cbox.setName(“2”);
rButton=新的JRadioButton(“RADIOBUTTON”,false);
rButton.setName(“3”);
components=新的ArrayList();
组件。添加(按钮);
组件。添加(切换按钮);
组件。添加(标签);
添加组件(cbox);
组件。添加(rButton);
数据=新对象[]{
“按钮”、“切换按钮”、“标签”,
“复选框”、“单选按钮”
};
myList=新的JLList(数据);
myList.setSelectionMode(ListSelectionModel.SINGLE\u INTERVAL\u SELECTION);
myList.addListSelectionListener(新ListSelectionListener()
{
公共作废值已更改(ListSelectionEvent lse)
{
int index=myList.getSelectedIndex();
整数时间=0;
System.out.println(“索引:”+Index);
lastComponent=components.get(索引);
contentPane.add(lastComponent);
time=Integer.parseInt(lastComponent.getName());
contentPane.revalidate();
contentPane.repaint();
计时器=新的计时器(时间*1000,TimeAction);
timer.setRepeats(假);
timer.start();
}
});
myList.setVisibleRowCount(5);
myList.setLayoutOrientation(JList.VERTICAL_WRAP);
}
私有ActionListener timerAction=新ActionListener()
{
已执行的公共无效行动(行动事件ae)
{
contentPane.remove(lastComponent);
contentPane.revalidate();
contentPane.repaint();
}
};
私有void createAndDisplayGUI()
{
JFrame=新JFrame(“列表和计时器”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(真);
frame.getContentPane().add(contentPane,BorderLayout.CENTER);
frame.getContentPane().add(myList,BorderLayout.LINE_END);
框架。设置尺寸(300300);
frame.setVisible(true);
}
公共静态void main(字符串…参数)
{
SwingUtilities.invokeLater(新的Runnable()
{
公开募捐
{
新建ListAndTimer().createAndDisplayGUI();
}
});
}
}
试试这段代码,这能满足您的需要吗:-)
import java.awt.*;
导入java.awt.event.*;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.*;
导入javax.swing.event.*;
公共类ListAndTimer
{
私人按钮;
私人JToggleButton toggleButton;
私人标签;
私人JCheckBox-cbox;
私人JRadioButton rbbutton;
私有对象[]数据;
私人JList myList;
私有列表组件;
私有JComponent组件;
私有JPanel内容窗格;
私人定时器;
公共列表和计时器()
{
contentPane=newjpanel();
按钮=新的JButton(“按钮”);
按钮。设置名称(“2”);
toggleButton=新的JToggleButton(“切换按钮”);
toggleButton.setName(“3”);
标签=新的JLabel(“标签”);
label.setName(“4”);
cbox=新的JCheckBox(“复选框”,false);
cbox.setName(“2”);
rButton=新的JRadioBut
SwingUtilities.invokeAndWait ( new Runnable ()
{
public void run ()
{
// Code here
}
} );
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
public class ListAndTimer
{
private JButton button;
private JToggleButton toggleButton;
private JLabel label;
private JCheckBox cbox;
private JRadioButton rButton;
private Object[] data;
private JList myList;
private List<JComponent> components;
private JComponent lastComponent;
private JPanel contentPane;
private Timer timer;
public ListAndTimer()
{
contentPane = new JPanel();
button = new JButton("BUTTON");
button.setName("2");
toggleButton = new JToggleButton("TOGGLE BUTTON");
toggleButton.setName("3");
label = new JLabel("LABEL");
label.setName("4");
cbox = new JCheckBox("CHECKBOX", false);
cbox.setName("2");
rButton = new JRadioButton("RADIOBUTTON", false);
rButton.setName("3");
components = new ArrayList<JComponent>();
components.add(button);
components.add(toggleButton);
components.add(label);
components.add(cbox);
components.add(rButton);
data = new Object[]{
"Button", "Toggle Button", "Label",
"CheckBox", "RadioButton"
};
myList = new JList(data);
myList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
myList.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent lse)
{
int index = myList.getSelectedIndex();
int time = 0;
System.out.println("Index : " + index);
lastComponent = components.get(index);
contentPane.add(lastComponent);
time = Integer.parseInt(lastComponent.getName());
contentPane.revalidate();
contentPane.repaint();
timer = new Timer(time * 1000, timerAction);
timer.setRepeats(false);
timer.start();
}
});
myList.setVisibleRowCount(5);
myList.setLayoutOrientation(JList.VERTICAL_WRAP);
}
private ActionListener timerAction = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
contentPane.remove(lastComponent);
contentPane.revalidate();
contentPane.repaint();
}
};
private void createAndDisplayGUI()
{
JFrame frame = new JFrame("List And Timer");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.getContentPane().add(contentPane, BorderLayout.CENTER);
frame.getContentPane().add(myList, BorderLayout.LINE_END);
frame.setSize(300, 300);
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ListAndTimer().createAndDisplayGUI();
}
});
}
}