使用带有JList <string>的单个String进行操作

时间:2015-06-20 03:28:01

标签: java swing jpanel action jlist

我正在Java Swing中编写一个Pokedex,我计划让每个Pokemon在JList对象中用String表示。当用户点击一个神奇宝贝时,我希望它在主框架中打开一个新的选项卡式面板,其中包含按类别排序的特定神奇宝贝的所有信息。但我无法弄清楚如何让String实现一个动作。如果可以解决问题,我愿意更改列表类型。我目前的代码如下:

//this is an intermediate Pokedex application for windows.  the code for the application is below.
//import the needed jlibraries for the program
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Color;
import java.awt.event.*;
import javax.swing.UIManager.*;
import javax.swing.border.*;
import javax.imageio.*;
import java.io.*;
import java.lang.*;
import javax.swing.JRadioButtonMenuItem.*;
import java.util.*;
import javax.swing.JOptionPane;

//everything below is the pokedex class
public class Pokedex extends JFrame
{
    String[] gen1 = {"Bulbasaur", "Ivysaur"};
    JList<String> gen1List = new JList<String>(gen1);
    JScrollPane browsePane = new JScrollPane(gen1List);
    JPanel topIndexPanel = new JPanel();

    int intX;

    public static void main(String[] args)
    {
        Toolkit.getDefaultToolkit().setDynamicLayout(true);
        System.setProperty("sun.awt.noerasebackground", "true");
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);

        try
        {
            UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
        }
        catch (ClassNotFoundException ex)
        {
            java.util.logging.Logger.getLogger(Pokedex.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        catch (InstantiationException ex)
        {
            java.util.logging.Logger.getLogger(Pokedex.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        catch (IllegalAccessException ex)
        {
            java.util.logging.Logger.getLogger(Pokedex.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        catch (javax.swing.UnsupportedLookAndFeelException ex)
        {
            java.util.logging.Logger.getLogger(Pokedex.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        Pokedex f = new Pokedex();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                f.setBounds(0,0,screenSize.width, screenSize.height);
                f.setVisible(true);
                f.setTitle("Pokedex");
    }

    public Pokedex()
    {
        add(browsePane, BorderLayout.WEST);
        gen1List.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        gen1List.setBackground(Color.BLACK);
        gen1List.setForeground(Color.WHITE);
        gen1List.setFont(new Font("Arial", Font.PLAIN, 18));
        addWindowListener(
        new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
            System.exit(0);
            }
        });

        String selected = gen1List.getSelectedValue().toString();
        System.out.println(selected);
    }
}

编辑

我能够使用下面的代码创建一个工作,并进行一些修改,它将完成我需要的工作。

gameRedList.addListSelectionListener(new ListSelectionListener()
        {
            public void valueChanged(ListSelectionEvent arg0)
            {
                if (!arg0.getValueIsAdjusting())
                {
                  actionString = gameRedList.getSelectedValue().toString();
                  if (actionString=="Bulbasaur")
                  {
                      JFrame testFrame = new JFrame();
                      testFrame.setBounds(0,0,500,500);
                      testFrame.setBackground(Color.BLACK);
                      testFrame.setForeground(Color.WHITE);
                      testFrame.setTitle("Success");
                      testFrame.setVisible(true);

                  }
                }
            }
        });

1 个答案:

答案 0 :(得分:1)

  

用户点击神奇宝贝

您无法假设用户会点击神奇宝贝。用户可以使用鼠标或键盘。要在选择JList中的项目时收到通知,您将使用ListSelectionListener。阅读关于选择列表中的项目的Swing教程中的部分以获取更多信息和工作示例

  

我希望它在主框架中打开一个新的选项卡式面板,其中包含该特定宠物小精灵的所有信息

您可能不想打开新的选项卡式面板。而是使用组件创建GUI。然后,当选择更改时,您只需更新显示的数据。也就是说,在设计GUI时,您应避免添加/删除组件。

此外,您不需要WindowListener。这是旧的AWT代码。在Swing中你可以使用:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);