gpt4 book ai didi

java - 从另一个 JFrame 刷新 Jlist

转载 作者:行者123 更新时间:2023-12-02 07:07:10 24 4
gpt4 key购买 nike

当我按下另一个 JFrame 中的按钮时,我想刷新 JList。

所以我有一个 JFrame GuiBoss 来管理员工(添加、删除、更新)。当我按下添加按钮时,另一个 Jframe 将打开,我在其中创建一个新员工。

//打开“add_form”,我在其中提供有关新员工的详细信息。

private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                       
GuiBoss gb = new GuiBoss(contrb,boss);
Add_form af = new Add_form(gb,contrb,boss);
af.setVisible(true);

}

//刷新列表并添加新员工。

public void refresh(Employee e){
System.out.println("I reach this point!");
//if i print e.getName() it works, printing the right name that i give in the "add_form"
listModel.addElement(e);
//listModel.clear(); //don't work either.

}

我的问题是,当我提交有关新员工的详细信息时,我从 GuiBoss 框架调用函数刷新(Employee e),消息(“我到达这一点!”)显示在控制台上,大小为listModel 发生更改,但列表不会刷新。另外我必须说我为列表正确设置了模型。

//从表单中获取数据并从主框架调用refresh(Employee e)("GuiBoss")

private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                       
//String Id = txtID.getText();
String UserName = txtName.getText();
txtHour.setVisible(false);
boolean b = false;
if(rbtnYes.isSelected() == true){
b = true;
}
if(rbtnNo.isSelected() == true){
b = false;
}
if(rbtnYes.isSelected()==false && rbtnNo.isSelected() == false){
System.out.println("Select the presence!");
}
else{
txtOra.setVisible(true);
String Hour = txtHour.getText();
e = new Employee(UserName,b,Hour,boss); //boss i get from main frame when i start this add new employee form
contrb.addEmployee(e);
gb.refresh(e); //gb is of type GuiBoss were i have the function that does
// the refresh
}
}

如果您有任何想法,请告诉我。谢谢。

最佳答案

为什么不使用模态 JDialog 来收集有关新员工的信息,而不是弹出另一个框架。关闭对话框后,您可以从对话框中提取详细信息并刷新当前框架内的列表。

这可以防止不必要地公开 API 的某些部分。

查看How to use Dialogs了解详情。

已更新

假设您已正确设置模型,那么您的代码应该可以工作...按照此示例...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestList03 {

public static void main(String[] args) {
new TestList03();
}

public TestList03() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

private DefaultListModel model;

public TestPane() {
setLayout(new BorderLayout());
model = new DefaultListModel();
JList list = new JList(model);
add(new JScrollPane(list));
JButton btn = new JButton("Add");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addElement("New Element");
}
});
add(btn, BorderLayout.SOUTH);
}

}

}

这表明还有其他问题您没有向我们展示......

更新了引用问题的可能修复

这基本上演示了将主面板的引用传递给子工厂,该子工厂负责实际将值添加回主面板。通常,我会使用某种界面,而不是公开整个面板来简单地提供对单个方法的访问,但这是一个简单的示例。

它使用普通实现和内部类作为ActionListener来演示将“self”引用传递给另一个类的两种最常见的方法。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestList03 {

public static void main(String[] args) {
new TestList03();
}

public TestList03() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel implements ActionListener {

private DefaultListModel model;

public TestPane() {
setLayout(new BorderLayout());
model = new DefaultListModel();
JList list = new JList(model);
add(new JScrollPane(list));

JPanel buttons = new JPanel(new FlowLayout(FlowLayout.CENTER));

JButton btn1 = new JButton("Add 1");
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Factory(TestPane.this, "Added by Button 1");
}
});
buttons.add(btn1);

JButton btn2 = new JButton("Add 2");
btn2.addActionListener(this);
buttons.add(btn2);

add(buttons, BorderLayout.SOUTH);
}

public void addItem(String text) {
model.addElement(text);
}

@Override
public void actionPerformed(ActionEvent e) {
new Factory(TestPane.this, "Added by Button 2");
}
}

public class Factory {

public Factory(TestPane testPane, String text) {
testPane.addItem(text);
}
}
}

关于java - 从另一个 JFrame 刷新 Jlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com