Я изучаю Java и пытаюсь сделать менеджер паролей с Swing и Miglayout; В этой проблеме я пытаюсь составить список коробок в JPanel с тремя ярлыками: «доменное имя», «имя пользователя» и «Примечания». Мой текущий метод генерирует каждую из панелей правильно (я знаю это, так как у меня есть цветный фон), но на нем показывают только этикетки для первой в списке. Список объектов моего класса входа, который на данный момент просто содержит имя пользователя, пароль и т. Д. каждой «записи» (учетная запись), и для цикла, кажется, правильно генерирует панели. Добавление диалога System.out для печати текста, который он должен добавлять, показывает, что он действительно правильно читает данные, но отображаются только метки для первого Infobox. Это проблема с тем, как я называю конструктором или самого конструктора? Это мой менеджер макетов (я понятия не имею, как работает Miglayout)? Я пробовал переписать это несколько раз, и все дают один и тот же результат.import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import net.miginfocom.swing.MigLayout;
public class UI {
public static void main(String[] args) {
JPanel menuPanel = new JPanel(); // Placeholder
JButton menuButton = new JButton("Menu");
menuPanel.add(menuButton);
JTextField searchField = new JTextField(); // Placeholder
searchField.setPreferredSize(new Dimension(700, 100));
JPanel entryPanel = new JPanel(new MigLayout("flowy, fillx"));
JScrollPane entryScrollPanel = new JScrollPane(entryPanel);
entryScrollPanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JPanel detailPanel = new JPanel(); // Placeholder
JTextArea textArea = new JTextArea(20, 20);
JScrollPane detailScrollPanel = new JScrollPane(textArea);
detailScrollPanel.setAutoscrolls(true);
detailPanel.add(detailScrollPanel);
for (Entry entry : Main.list) {
new infoBox(entryPanel, entry);
}
MigLayout mainLayout = new MigLayout(
"fillx, flowy",
"",
"");
JPanel contentPane = new JPanel(mainLayout);
contentPane.add(menuPanel, "wrap, dock west, width 100:200:200");
contentPane.add(searchField, "span, height 40:40:80");
contentPane.add(entryScrollPanel, "grow, wrap, height 400:800:1200, width 400:700:1200");
contentPane.add(detailPanel, "dock east, width 300:400:500");
JFrame f = new JFrame("Password Manager");
f.setContentPane(contentPane);
f.setLocationByPlatform(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
protected static class infoBox {
private static MigLayout infoBoxLayout = new MigLayout(
"wrap 3, width 400:700:1000, height 50!",
"grow",
""
);
public infoBox(JPanel panel, Entry entry) {
JSeparator separator = new JSeparator();
JLabel domainLabel = new JLabel(entry.getDomain());
JLabel usernameLabel = new JLabel(entry.getUsername());
JLabel notesLabel = new JLabel(entry.getNotes());
JPanel infoBoxPanel = new JPanel(infoBoxLayout);
infoBoxPanel.setBackground(new Color(255, 245, 245));
infoBoxPanel.add(domainLabel);
infoBoxPanel.add(usernameLabel);
infoBoxPanel.add(notesLabel);
// InfoBoxListener myListener = new InfoBoxListener(entry);
// infoBoxPanel.addMouseListener(myListener);
panel.add(infoBoxPanel);
}
public class InfoBoxListener extends MouseAdapter {
private Entry entry;
public InfoBoxListener(Entry entry) {
this.entry = entry;
}
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
// Update details panel
// Update JPanel formatting
}
}
public void mouseHover(MouseEvent e) {
// Update JPanel formatting
}
}
}
}
< /code>
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static List list = new ArrayList();
public static void main(String[] args) {
try {
FileIn.readEncrypted();
} catch (IOException e) {
throw new RuntimeException(e); // Ignore this for now
}
for (Entry entry : list) { // For debugging
String d = entry.getDomain();
String u = entry.getUsername();
String p = entry.getPassword();
String n = entry.getNotes();
System.out.printf("Domain: %s Username: %s Password: %s Notes: %s%n", d, u, p, n);
}
FileOut.writeEncrypted();
UI.main(args);
}
}
< /code>
Input data:
domain1|username1|password1|
domain2|username2|password2|
domain3|username3|password3|comment 3
domain4|username4|password4|
domain5|username5|password5|
domain6|username6|password6|
domain7|username7|password7|
domain8|username8|password8|
domain9|username9|password9|comment 9
domain10|username10|password10|
domain11|username11|password11|
domain12|username12|password12|comment 12
domain13|username13|password13|
Подробнее здесь: https://stackoverflow.com/questions/797 ... -displayed