主目录的 JPanel 不会从另一个类更新



我有扩展JFrame的类Home,它panel_event保存一个静态变量。我还有另一个叫做EventLabel的类,它创建了一个标签及其功能,并使用refresh()方法将其添加到面板中,代码运行没有错误,但我的panel_event内容没有得到更新"显示">

我已经添加了revalidate()repaint()方法

public EventLabel(String name2, String date2, int priority2, String note2) {
super();
this.name = name2;
this.date = date2;
this.priority = priority2;
this.note = note2;
}
public void buildLabel() {
label = new JLabel(this.getName());
label.setBounds(10, 11, 403, 34);
label.setForeground(Color.WHITE);
label.setFont(new Font("Yu Gothic UI Light", Font.PLAIN, 20));
String n = this.getNote();
String d = this.getDate();
int p = this.getPriority();
String na = this.getName();
setFont(new Font("Yu Gothic UI Light", Font.PLAIN, 20));
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
EventDetailFrame detailFrame = new EventDetailFrame();
detailFrame.NewWindow();
detailFrame.textAreaNoteD.setText(n);
detailFrame.textFieldNameD.setText(na);
detailFrame.textFieldDateD.setText(d);
detailFrame.textFieldPriorityD.setText("Priority");
}
});
}
public void refresh(){
panel_event.add(label);
panel_event.revalidate();
panel_event.repaint();
}

这是带有按钮的框架,应该更改panel_event的内容

btnSaveAndClose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {            
String name = txtEventName.getText();
String date = txtEventDate.getText();
String note = txtEventNote.getText();
int priority = getPriorityNumber(txtEventPriority.getText());
Event event = new Event(name, date, note, priority);
EventLabel event_label = new EventLabel(event.getName(),event.getDate(),event.getPriority(),event.getNote());
event_label.buildLabel();
event_label.refresh();
dispose();
}
});

点击btnSaveAndClose后,我希望panel_event显示我的新JLabel

我创建了一个关于如何显示新标签的工作示例。你可以调用 validate(( 和 repaint((。

import java.awt.Color;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.StringJoiner;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class EventLabel extends JLabel
{
private static final long serialVersionUID = -3122247523298894551L;
public EventLabel(String name, String date, String priority, String note)
{
super(name);
setBorder(BorderFactory.createLineBorder(Color.WHITE, 3, false));
setFont(new Font("Yu Gothic UI Light", Font.PLAIN, 20));
this.setOpaque(true);
setBackground(Color.WHITE);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
StringJoiner text = new StringJoiner("n");
text.add("name: " + name);
text.add("date: " + date);
text.add("priority: " + priority);
text.add("note: " + note);
JOptionPane.showMessageDialog(null, text, "Event", JOptionPane.INFORMATION_MESSAGE);
}
});
}
}

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Main
{
private static JButton button;
private static JPanel labelPanel;
private static JTextField nameField;
private static JTextField dateField;
private static JTextField priorityField;
private static JTextField noteField;
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
JFrame window = new JFrame();
window.setResizable(false);
window.setTitle("Label Test");
window.getContentPane().add(getContent());
initController();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setSize(680, 700);
window.setLocationRelativeTo(null);
window.setVisible(true);
}
});
}
protected static void initController()
{
button.addActionListener(event -> {
labelPanel.add(new EventLabel(nameField.getText(), dateField.getText(), priorityField.getText(),
noteField.getText()));
nameField.setText("");
dateField.setText("");
priorityField.setText("");
noteField.setText("");
labelPanel.validate();
labelPanel.repaint();
});
}
private static Component getContent()
{
JPanel panel = new JPanel(new BorderLayout());
panel.add(getNorthPanel(), BorderLayout.NORTH);
labelPanel = new JPanel(new FlowLayout());
labelPanel.setBorder(BorderFactory.createTitledBorder("Events"));
panel.add(labelPanel, BorderLayout.CENTER);
return panel;
}
private static Component getNorthPanel()
{
JPanel panel = new JPanel(new FlowLayout());
JPanel inputPanel = new JPanel(new GridLayout(0, 2));
inputPanel.setPreferredSize(new Dimension(400, 100));
nameField = new JTextField();
dateField = new JTextField();
priorityField = new JTextField();
noteField = new JTextField();
inputPanel.add(new JLabel("name"));
inputPanel.add(nameField);
inputPanel.add(new JLabel("date"));
inputPanel.add(dateField);
inputPanel.add(new JLabel("priority"));
inputPanel.add(priorityField);
inputPanel.add(new JLabel("note"));
inputPanel.add(noteField);
panel.add(inputPanel);
button = new JButton("add event");
panel.add(button);
return panel;
}
}

最新更新