Swing Java在间隔后显示组件

Swing Java在间隔后显示组件,swing,Swing,我有一个JC组件列表,每个组件都有一个可见性时间。我必须从列表中选择每个组件,使用摆动计时器,在指定的可见性时间内显示它,然后从面板中删除显示的组件,从列表中取出下一个组件并显示,等等。在特定时间,我应该只显示一个组件。请帮忙 testList.add(new JLabel()); testList.add(new JButton()); java.util.Timer timer; TimerTask task; for (Iterator<&g

我有一个JC组件列表,每个组件都有一个可见性时间。我必须从列表中选择每个组件,使用摆动计时器,在指定的可见性时间内显示它,然后从面板中删除显示的组件,从列表中取出下一个组件并显示,等等。在特定时间,我应该只显示一个组件。请帮忙

    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();
            }
        });
    }
}