제 질문은 스윙 프로그래밍과 관련이 있습니다. 부모 패널 (구성 요소 a)에서 제거하고 구성 요소 a의 부모 (구성 요소 b) 중 하나에 추가하여 구성 요소 (구성 요소 x)를 확대하고 싶습니다. 그 전에는 b의 모든 구성 요소에서 setVisible (false)을 호출합니다. 그 후에 나는 이것을 b에서 제거하고 a를 추가하여 이것을 다시 만들고 싶습니다.이동 후 구성 요소의 크기를 조정할 수 없습니다.
이후 모든 구성 요소의 크기를 조정할 수 없습니다.
왜 그럴까요?
쉬운 예 : 그 후
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
public class SwingTest {
private static ViewPanel layer1;
private static JFrame frame;
private static JTabbedPane tabbedPane;
private static ViewPanel root;
public static void main(String[] args) {
frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setMinimumSize(new Dimension(800, 600));
root = new ViewPanel();
root.setBackground(Color.blue);
root.setPreferredSize(new Dimension(400, 600));
root.setLayout(new BorderLayout());
root.add(new JLabel("blue area"));
layer1 = new ViewPanel();
layer1.setBackground(Color.red);
layer1.setPreferredSize(new Dimension(400, 600));
layer1.setLayout(new BorderLayout());
tabbedPane = new JTabbedPane();
tabbedPane.add("A", new JLabel("A label"));
tabbedPane.setPreferredSize(new Dimension(400, 600));
layer1.add(tabbedPane);
root.add(layer1);
frame.add(root, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
Thread t = new Thread() {
@Override
public void run() {
try {
Thread.sleep(8000);
System.out.println("start");
for (Component c : root.getComponents()) {
c.setVisible(false);
}
layer1.remove(tabbedPane);
root.add(tabbedPane);
Thread.sleep(8000);
root.remove(tabbedPane);
layer1.add(tabbedPane);
for (Component c : root.getComponents()) {
c.setVisible(true);
c.repaint();
}
} catch (InterruptedException e) {
//...
}
}
};
t.start();
}
}
서식있는 코드; 잘못된 경우 되돌려주십시오. 'ViewPanel'가 없습니다. – trashgod