[英]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.