繁体   English   中英

刷新按钮事件中的GUI中的JList

[英]Refreshing JList in GUI on button event

我在网上寻找有关如何在添加JList模型后更新JList 有人说自动执行,有人说您必须手动执行。 我都尝试过,但没有取得太大的成功。 我正在尝试仅使用addElement方法更新模型,并且会通过。 我遍历了代码,一切都正确传递了。 GUI不刷新。

package com.user.tutorial;

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.DefaultListModel;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.Box;
import javax.swing.JMenu;
import javax.swing.JTextPane;
import javax.swing.ListSelectionModel;

import java.awt.Component;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.BoxLayout;
import javax.swing.JList;
import javax.swing.AbstractListModel;

import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.SystemColor;
import java.awt.Insets;
import java.util.List;

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();
                }
            }
        });
    }
public Window() {
    initialize();
}

/**
 * Initialize the contents of the frame. This is where Window Builder
 * will generate its code.
 */
public void addTo(JPanel displayPanel, Component contentToAdd)
{
    displayPanel.add(contentToAdd);
}

public void initialize() {

    Dimension sidePanelSize = new Dimension(180, 540);

    frame = new JFrame();
    frame.setBounds(100, 100, 480, 540);
    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);

    final JPanel itemPanel = new JPanel();
    itemPanel.setPreferredSize(sidePanelSize);
    itemPanel.setBackground(Color.WHITE);
    itemPanel.setLayout(new BorderLayout());

    DefaultListModel<String> model = new DefaultListModel<>();
    for (String items : new String [] {"Case", "Motherboard", "CPU", "GPU", "PSU", "RAM", "HDD"})
        model.addElement(items);

    final JList<String> itemList = new JList<>();
    itemList.setModel(model);

    itemList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    itemList.setFont(new Font("SegoeUI", Font.BOLD, 11));
    itemPanel.add(itemList, BorderLayout.WEST);
    frame.getContentPane().add(itemPanel, BorderLayout.WEST);

    final JList<String> addToList = new JList<>(new DefaultListModel<String>());

    JPanel buttonContainer = new JPanel();
    JPanel buttonList = new JPanel();
    GridBagConstraints c = new GridBagConstraints();

    buttonList.setLayout(new BoxLayout(buttonList, BoxLayout.Y_AXIS));
    buttonContainer.setLayout(new GridBagLayout());
    buttonContainer.setBackground(new Color(238, 238, 238));

    final JPanel displayPanel = new JPanel();
    displayPanel.setPreferredSize(sidePanelSize);
    displayPanel.setBackground(Color.WHITE);
    frame.getContentPane().add(displayPanel, BorderLayout.EAST);    

             // Right here is where I do the button action. The `displayModel` is the model of the `JList` I'm updating.

        JButton addButton = new JButton(">>");
        addButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                List<String> selected = itemList.getSelectedValuesList();
                DefaultListModel<String> displayModel = (DefaultListModel<String>) addToList.getModel();

                for (String item: selected) {
                    displayModel.addElement(item);
                }
            }
        });
        buttonList.add(addButton);


        JButton deleteButton = new JButton("<<");
        deleteButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        buttonList.add(deleteButton);
        c.gridx = 0;
        c.gridy = 0;
        buttonContainer.add(buttonList, c);
        frame.getContentPane().add(buttonContainer, BorderLayout.CENTER);
    }
}

我不确定发生了什么问题。 我检查了文档。 我只是猜想我缺少一些简单的东西。 谢谢您的帮助。

一切似乎都已通过,但GUI没有任何变化。

您是否读过我关于可能出现问题的建议的“ 3”点?

@camickr和@FredK感谢您的帮助。 这些建议很有帮助。 原来,在更改某些内容时,我删除了JList对特定面板的分配。 它正在更新,但从未分配给面板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM