Ako môžem znovu načítať komponent v JFrame z vlastnej triedy, akoby som ho musel odstrániť, vytvoriť nový a pridať ho späť?
Rovnako ako this.repaint()
, ale v skutočnosti ju rekonštruuje, ak je to možné.
odpovede:
0 pre odpoveď č. 1Najprv by ste nemali pridávať JComponent priamo na rámček, bolo by lepšie, keby ste pridali JPanel na JFrame a potom pridať komponenty na ne.
Ak chcete nahradiť komponent na zariadení JPanel, môžete použiť nasledujúce funkcie.
jPanel.remove(comp);
or
jPanel.removeAll();
jPanel.add(comp);
jPanel.revalidate();
jpanel.repaint();
Ak chcete pracovať len s JFrame, potrebujete zmeniť veľkosť rámčeka trochu po výmene komponentu na obnovenie rámca pomocou jf.setSize (x, y).
import javax.swing.*;
import java.util.concurrent.*;
public class FrameReplaceComp {
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame("Hello swing");
final JLabel label = new JLabel("Label 1");
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true);
Thread.sleep(1000);
final JLabel label1 = new JLabel("Label 2");
frame.remove(label);
frame.add(label1);
frame.setSize(300,101);
}
}