신기한 실수를하고 있지만 JFrame의 JPanel에 대한 GridLayout을 만들 때 행 매개 변수를 변경하면 다른 JPanel이 내 레이아웃을 설정 GridBug 생성자에서이상한 스윙 오류 : GridLayout 매개 변수를 설정하면 JPanel이 사라집니다.
- 및 BorderLayout.CENTER에 JPanel을의 하위 클래스를 넣어 :
여기에 코드의 버전을 박탈이다 : 모두 사라진다. 이것은 원래 코드에있는 다른 것들을 수행하지만, 여기에 표시되는 것을 보여주기위한 상자를 그립니다.
- 래도 BorderLayout.PAGE_END 첨가되는 바닥 패널의 상태 값이 낮을수록 잘 동작, 상기 중앙 패널은 높은 값이 소멸하는 중앙 패널을 유발하는 GridLayout과 행 파라미터를 변경, 특히
- 를 소멸시킨다 그때가 작동 JLabel의 또는 서브 패널을 추가하지 않는 경우
- 코드는 지금처럼 ... 내가 코드의 일부를 주석을 해제하는 경우 행 매개 변수를 줄이기 위해, 내 컴퓨터에서 작동하지 않거나
내가 뭘 잘못하고 있는지 전혀 모르겠다.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GridBug extends JFrame{
static class ImagePanel extends JPanel{
@Override
public Dimension getPreferredSize(){
return new Dimension(200,200);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println("Painting image panel...");
g.setColor(Color.CYAN);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
public GridBug() {
setLayout(new BorderLayout());
/*PROBLEM CODE HERE*/
//add center image panel - does not appear depending on GridLayout settings in other panels
ImagePanel centerPanel = new ImagePanel();
add(centerPanel , BorderLayout.CENTER);
//add bottom panel
JPanel bottomPanel = new JPanel();
add(bottomPanel, BorderLayout.PAGE_END);
bottomPanel.setLayout(new GridLayout(6,0)); //doesn't work
// bottomPanel.setLayout(new GridLayout(5,0)); //works
JPanel subPanel = new JPanel();
//if I pass more than 4 or so rows as param to gridlayout,
//then imagePanel is not displayed
subPanel.setLayout(new GridLayout(4,0)); //doesn't work
// subPanel.setLayout(new GridLayout(3, 0)); //works
//if I don't add this label - works
JLabel label = new JLabel("A Label:");
subPanel.add(label);
bottomPanel.add(subPanel); //if I don't add the subPanel it works fine
/*END OF PROBLEM CODE?*/
//set window params
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setLocationRelativeTo(null);
setVisible(true);
}
public static final void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GridBug();
}
});
}
}
감사합니다. 나는 setSize()를 사용하지 않았고 이번에는 설정하지 않았다. 나는 다른 코드의 대중을 테스트하는 데 오랜 세월을 보냈다. 완전히 다른 문제라고 생각하고 그 한 줄만 남겼다. – mallardz