java - 如何在 JPanel 类中创建 JList "refresh"方法

标签 java swing class user-interface methods

我是java初学者,想要制作一个带有包含单独JPanel的选项卡的JFrame。一个面板有一个列表,其中显示您在不同面板中选择的内容,因此我希望此面板始终显示您在不同面板中选择的内容列表(我希望这是有意义的)。为此,我需要创建一个刷新 JList 的方法。这是我迄今为止最远的距离:

public class PanelClass extends JPanel {
    private JList list;
    private DefaultListModel listModel = new DefaultListModel();
    private ArrayList<SomeOtherClass> objectArray = new ArrayList<SomeOtherClass>();

    public PanelClass() {
        list.setModel(listModel);
    }

    public void refresh() {
        updateListModel();
        list.setModel(listModel);
    }

    public void updateListModel() {
        if (objectArray.isEmpty()) {
            System.out.println("No Objects In Array!");
        } else {
            listModel.clear();
            for (SomeOtherClass SOC : objectArray) {
                // SOC.getName() just returns a string
                listModel.addElement(SOC.getName());
            }
        }
    }

    public void addObjectToArray(SomeOtherClass SOC) {
        objectArray.add(SOC);
    }
}

有人可以告诉我如何使用“刷新”方法来不断保持 JList 最新吗?

最佳答案

AWT/Swing 事件模型基于作为事件源的小部件(在 MVC 范例中,它们既是 View 又是 Controller )。不同的小部件源不同的事件类型。

查看 java.awt.event (主要)和 javax.swing.event 包,了解您需要按顺序实现和注册的监听器接口(interface)达到您想要的效果。

基本上,您编写一个 Listener 实现,并将其注册到 Widget1。当 Widget1 检测到事件时,它会通知您,然后您可以使用它提供的信息来更新 Widget2

例如,如果单击一个按钮会将一个对象添加到您的列表中,您可能会看到如下所示的内容(我通常将此代码放在包含的 JFrame 类中,并使其实现监听器接口(interface);但您可以选择使用内部类或单独的监听器类):

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener {
  private JButton button = new JButton("Click me!");
  private DefaultListModel<String> listModel = new DefaultListModel<String>();
  private JList<String> list = new JList<String>(listModel);
  private int counter = 1;

  public MyFrame() {
    setTitle("Test Updates");

    JTabbedPane tabs = new JTabbedPane();
    add(tabs, BorderLayout.CENTER);

    JPanel panel = new JPanel();
    panel.add(list);
    tabs.add("Selections", panel);

    panel = new JPanel();
    button.addActionListener(this);
    panel.add(button);
    tabs.add("Options", panel);

    pack();
  }

  @Override
  public void actionPerformed(final ActionEvent event) {
    if (button.equals(event.getSource())) {
      listModel.addElement("Item " + counter++);
    }
  }

  /* Test it! */
  public static void main(String[] args) {
    final MyFrame frame = new MyFrame();
    frame.addWindowListener(new WindowAdapter() {
      @Override public void windowClosing(final WindowEvent e) {
        frame.setVisible(false);
        frame.dispose();
        System.exit(0);
      }
    });

    frame.setVisible(true);
  }
}

此代码示例很小,但它应该让您了解如何实现您想要的内容。

关于java - 如何在 JPanel 类中创建 JList "refresh"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18502025/

相关文章:

c++ - 从模板创建对象,类型由用户输入 c++

java - 我可以区分 org.apache.commons.cli 中的短选项和长选项吗

java - 使用随机输入创建对象

Java空指针异常不会终止程序

java - 如何实现 sleep 以显示图像幻灯片

php - static 关键字对常量有影响吗?

HTML CSS 按钮悬停不会通过类工作

java - SQL:比较两个表

java - 仅使用递归设置从 1 到所选数字的数字

java - 用于选择的 JTable 模型的适当集合