이 간단한 예제에서와 같이 점진적으로 Java JFrame 디자인 구조를 수정하고 싶습니다. 루프에서 나는 JPanel의 preferredWidth를 증가시키고 pack() 메소드를 사용합니다. 그러나 팩 방법은 무시됩니다. 루프에서 팩을 꺼내서 한 번만 사용하면 작업이됩니다. 누구나 이유와 가능한 해결책을 알고 있습니까?루프에서 JFrame.pack() 사용
public class Calculadora extends JFrame {
private JPanel pnl = new JPanel();
private boolean flag;
public Calculadora() {
JPanel pnlPrincipal = new JPanel();
pnlPrincipal.setPreferredSize(new Dimension(300, 300));
pnlPrincipal.setBackground(Color.BLACK);
JButton btnAnexo = new JButton("Anexo");
btnAnexo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (flag) {
closeAnexo();
flag = false;
} else {
openAnexo();
flag = true;
}
}
});
pnlPrincipal.add(btnAnexo);
this.pnl.setBackground(Color.WHITE);
this.pnl.setPreferredSize(new Dimension(0, 300));
this.add(pnl, BorderLayout.EAST);
this.add(pnlPrincipal, BorderLayout.CENTER);
this.pack();
this.setVisible(true);
}
private void openAnexo() {
new Thread() {
@Override
public void run() {
for (int i = pnl.getWidth(); i <= 200; i++) {
pnl.setPreferredSize(new Dimension(i, 300));
pack();
}
}
}.start();
}
private void closeAnexo() {
new Thread() {
@Override
public void run() {
for (int i = pnl.getWidth(); i >= 0; i--) {
pnl.setPreferredSize(new Dimension(i, 300));
pack();
}
}
}.start();
}
public static void main(String[] args) {
new Calculadora();
}
}
정말 고마워요! 그것은 작동합니다! –
@ user2308270 당신은 환영합니다 :) – dic19