如何使JList“刷新"? JPanel类中的方法 [英] How to make a JList "refresh" method in a JPanel class

查看:235
本文介绍了如何使JList“刷新"? JPanel类中的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Java的初学者,想制作一个Jtab,其选项卡包含单独的JPanel.一个面板有一个列表,其中显示了您在其他面板中选择的内容,因此,我希望该面板始终显示您在另一个面板中选择的内容的列表(我希望这很有意义).为此,我需要制定一种刷新JList的方法.这是我得到的最远的信息:

I'm a beginner at java and want to make a JFrame with tabs containing a seperate JPanel. One panel has a list where it displays things that you select in a different panel, so I want this panel to always display a list of stuff that you have selected in a different panel (I hope that makes sense). To do this, I need to make a method to refresh the JList. This is the Farthest that I've gotten on that:

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保持最新状态吗?

Could someone please tell me how to make a "refresh" method to constantly keep the JList up to date?

推荐答案

AWT/Swing事件模型基于作为事件源的小部件(在MVC范例中,它们既是视图又是控制器).不同的小部件会产生不同的事件类型.

The AWT/Swing event model is based upon the widgets being event sources (in the MVC paradigm, they are both view and controller). Different widgets source different event types.

(主要)查看java.awt.eventjavax.swing.event包,您需要实现和注册这些监听器接口才能产生所需的效果.

Look at the java.awt.event (primarily), and javax.swing.event packages for the listener interfaces you'll need to implement and register in order to produce your desired effect.

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

Basically, you write a Listener implementation, and register it with Widget1. When Widget1 detects an event, it will notify you, and you can then use the information it provides to update Widget2.

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

For instance, if a button being clicked would add an object to your list, you might have something like below (I usually put this code in the encompassing JFrame class, and make it implement the listener interfaces; but you can choose to use inner classes or separate listener classes):

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

此代码示例是最少的,但它应该使您了解如何实现所需的内容.

This code sample is minimal, but it should give you an idea of how to go about implementing what you want.

这篇关于如何使JList“刷新"? JPanel类中的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆