java - 在 Java 中使用事件在另一个类中执行某些操作

标签 java swing event-handling jbutton event-listener

根据我的理解,

`list_1.addListSelectionListener(new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent evt) {

 }}

当选择列表中的某些内容时将执行某些操作,并且

button.addActionListener(new ActionListener() { 公共(public)无效actionPerformed(ActionEvent arg0){ 当按钮被按下时做某事。

我想编写一段代码来从一个列表中删除所选项目并将其添加到另一个列表中。 我无法使用 Jlist 方法,因为它不在按钮的范围内。 我不知道该怎么做。我在网上或书籍上找不到解决我问题的东西。

非常感谢

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.BorderLayout;

import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import javax.swing.JList;

import java.awt.GridLayout;

import javax.swing.JSplitPane;

import java.awt.Component;

import javax.swing.Box;

import java.awt.Dimension;

import javax.swing.JSeparator;

import java.awt.Panel;
import java.awt.List;

import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import java.awt.Color;
import java.awt.Font;

public class Window {

private JFrame frame;


public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Window window = new Window();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application. This is the constructor for this Window class.
 * All of the code here will be executed as soon as a Window object is made.
 */
public Window() {
    initialize();
}

/**
 * Initialize the contents of the frame. This is where Window Builder
 * will generate its code.
 */
public void initialize() {
    //creates an array for the list of components 
    String pclist[]={"case","moderboard","CPU","GPU","PSU","RAM","HDD"}; 

    frame = new JFrame();
    frame.setBounds(100, 100, 600, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menuBar = new JMenuBar();
    frame.setJMenuBar(menuBar);

    JMenu mnFile = new JMenu("File");
    menuBar.add(mnFile);

    JMenuItem mntmLoad = new JMenuItem("Load");
    mnFile.add(mntmLoad);

    JMenuItem mntmSave = new JMenuItem("Save");
    mnFile.add(mntmSave);

    JMenuItem mntmExit = new JMenuItem("Exit");
    mnFile.add(mntmExit);
    frame.getContentPane().setLayout(null);

    JButton button = new JButton(">>");
    button.setBounds(244, 170, 82, 36);
    button.setFont(new Font("Tahoma", Font.BOLD, 15));
    frame.getContentPane().add(button);

    JButton button_1 = new JButton("<<");
    button_1.setBounds(244, 219, 82, 36);
    button_1.setFont(new Font("Tahoma", Font.BOLD, 15));
    frame.getContentPane().add(button_1);

    JPanel panel = new JPanel();
    panel.setBounds(0, 0, 205, 493);
    panel.setBackground(Color.WHITE);
    frame.getContentPane().add(panel);
    panel.setLayout(null);

    JList list = new JList();// implements ActionListener;
    list.setBounds(0, 0, 205, 493);
    list.setListData(pclist); //populate the Jlist

    list.setFont(new Font("Tahoma", Font.BOLD, 18));
    panel.add(list);

    JPanel panel_1 = new JPanel();
    panel_1.setBounds(358, 0, 212, 493);
    panel_1.setBackground(Color.WHITE);
    frame.getContentPane().add(panel_1);
    panel_1.setLayout(null);

    JList list_1 = new JList();
    list_1.setBounds(203, 0, -200, 480);
    list_1.setSelectedIndex(0);
    list_1.setFont(new Font("Tahoma", Font.BOLD, 18));
    panel_1.add(list_1);

    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        //list_1.addElement("hi"); 
        System.out.println("hoi");  
        }
        });



    list.addListSelectionListener(new ListSelectionListener(){
          public void valueChanged(ListSelectionEvent arg0) {




          }});
    list_1.addListSelectionListener(new ListSelectionListener() {
          public void valueChanged(ListSelectionEvent arg0) {





                }  
          }

    );




}

}

最佳答案

首先创建您的 JList 实例变量

public class Window {

    private JFrame frame;

    private JList list;
    private JList list_1;

确保您正在初始化实例变量而不是创建新的局部变量...

//JList list = new JList();// implements ActionListener;
list = new JList();// implements ActionListener;
//...
panel.add(list);

//JList list_1 = new JList();
list_1 = new JList();
//...
panel_1.add(list_1);

这现在意味着可以从类实例的上下文中访问JList...

然后在您的 ActionListener 中,您可以简单地执行以下操作:...

Object selected = list.getSelectedValue();

或者...

int index = list.getSelectedIndex();

然后,您可以使用这些值来修改底层 ListModel 的状态...如果它支持这些操作...

关于java - 在 Java 中使用事件在另一个类中执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25880133/

相关文章:

java - 如何使用Apache Java POI在MS Excel中插入表格

java - 如何添加文本时钟小部件?

jquery - Wordpress 上的 Google Analytics 事件跟踪

Java 数据库连接。尝试通过sql登录jframe获取逻辑错误

python - matplotlib 中的事件连接和子图

java - PlatformUI.getWorkbench().getService(IEventBroker.class) 返回 null

java - 有没有办法使用 Scanner 对象在文本文档中搜索特定数据?

java - 按位与运算符的使用

java - 在 Swing 的 JTextArea 上使用 setText 时出现死锁

java - 如何让JComboBox响应回车键