我正在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);
}
}
}
});
答案 0 :(得分:1)
用户点击神奇宝贝
您无法假设用户会点击神奇宝贝。用户可以使用鼠标或键盘。要在选择JList中的项目时收到通知,您将使用ListSelectionListener
。阅读关于选择列表中的项目的Swing教程中的部分以获取更多信息和工作示例
我希望它在主框架中打开一个新的选项卡式面板,其中包含该特定宠物小精灵的所有信息
您可能不想打开新的选项卡式面板。而是使用组件创建GUI。然后,当选择更改时,您只需更新显示的数据。也就是说,在设计GUI时,您应避免添加/删除组件。
此外,您不需要WindowListener。这是旧的AWT代码。在Swing中你可以使用:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);