Я работаю над Java-приложением.Как добавить JLabel в JPanel
Я добавляю несколько меток после настройки рамки и ее видимости. Я также назвал revalidate()
на JPanel
, на котором я добавляю метки.
Но не все ярлыки возвращают правильное положение.
Вот мой код.
public class Test {
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame();
JScrollPane scrollPane = new JScrollPane();
JPanel view = new JPanel();
view.setLayout(new MigLayout());
scrollPane.setViewportView(view);
frame.setContentPane(scrollPane);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
List<JComponent> labels = update(view);
printLocations(labels);
}
public static List<JComponent> update(JPanel view) {
view.removeAll();
List<JComponent> labels = new ArrayList<>();
for (int i = 0; i < 10; i++) {
JLabel label = new JLabel("Label " + i);
view.add(label);
labels.add(label);
}
view.revalidate();
view.repaint();
return labels;
}
private static void printLocations(List<JComponent> labels) {
for (JComponent label : labels) {
System.out.println(label.getLocation());
}
}
}
Вот результат:
java.awt.Point[x=7,y=7]
java.awt.Point[x=52,y=7]
java.awt.Point[x=97,y=7]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
java.awt.Point[x=0,y=0]
В этом коде, если добавить некоторую задержку между адресом уточнения и печатания компонентов; все компоненты возвращают правильное положение. Но, в моем приложении, даже задержка не работает!
'frame.revalidate();' '== JFrame.pack()' 'Перед SetVisible (истина)', то JFrame может возвращения все границы или Dimension – mKorbel
Список labels = update (view); after frame.setVisible (true); , вы рискуете, что JComponent добавлены в уже видимый JFrame, стандартный модуль LayoutManager, отсутствующий в автоматическом уведомлении, код неправильный, или идея неверна, конечно зависит от реальной идеи, цель –
mKorbel
@mKorbel Итак, все компоненты должны быть добавлены до frame.setVisible (правда)? – Akshat