Java 레이아웃에 문제가 있습니다. 나는 맨 위에 5 개의 WorldWindowGLCanvas 그리드가있는 JLabel을 배치하려고합니다. 뭔가 같이 :다른 구성 요소를 다시 그릴 때 JLabel의 크기가 조절됩니다.
------------------------------------------------
JLabel
------------------------------------------------
|
WWCanvas | WWCanvas
|
------------------------------------------------
|
WWCanvas | WWCanvas
|
나는 현재 JPanel의 내부에 GridBagLayout을 사용하고 있습니다. 프로그램이 처음 시작될 때 모든 것이 정상적으로 보입니다. 그러나 모든 WorldWindowGLCanvas의 첫 번째 다시 그리기에서 최상위 JLabel은 즉시 크기가 두 배가되고 너무 많이 차지합니다. 다음은 관련 코드입니다.
JFrame f = new JFrame("ScintDisplay");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridBagLayout());
JLabel timeLabel = new JLabel(getTime(), JLabel.CENTER);
timeLabel.setSize(new Dimension(200,200));
WorldWindowGLCanvas wwd1 = new WorldWindowGLCanvas();
wwd1.setPreferredSize(new java.awt.Dimension(960, 1000));
WorldWindowGLCanvas wwd2 = new WorldWindowGLCanvas();
wwd2.setPreferredSize(new java.awt.Dimension(500, 480));
WorldWindowGLCanvas wwd3 = new WorldWindowGLCanvas();
wwd3.setPreferredSize(new java.awt.Dimension(500, 480));
WorldWindowGLCanvas wwd4 = new WorldWindowGLCanvas();
wwd4.setPreferredSize(new java.awt.Dimension(500, 480));
WorldWindowGLCanvas wwd5 = new WorldWindowGLCanvas();
wwd5.setPreferredSize(new java.awt.Dimension(500, 480));
wwd1.setModel(new BasicModel());
wwd2.setModel(new BasicModel());
wwd3.setModel(new BasicModel());
wwd4.setModel(new BasicModel());
wwd5.setModel(new BasicModel());
addComponent(f, wwd2, 0, 2, 1, 4, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(f, wwd1, 1, 2, 2, 8, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(f, wwd3, 3, 2, 1, 4, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(f, wwd4, 0, 6, 1, 4, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(f, wwd5, 3, 6, 1, 4, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(f, timeLabel, 0, 0, 4, 1, GridBagConstraints.WEST, GridBagConstraints.NONE);
f.setSize(1920, 1200);
f.setVisible(true);
double lat1 = getTimeLon();
for(; ;)
{
//System.out.println(lat);
timeLabel.setText(getTime());
System.out.println(timeLabel.getSize());
wwd1.getView().setEyePosition(Position.fromDegrees(0, lat1, 10500000));
wwd2.getView().setEyePosition(Position.fromDegrees(0, 0, 23500000));
wwd3.getView().setEyePosition(Position.fromDegrees(0, 0, 23500000));
wwd4.getView().setEyePosition(Position.fromDegrees(0, 0, 23500000));
wwd5.getView().setEyePosition(Position.fromDegrees(0, 0, 23500000));
wwd1.redraw();
wwd2.redraw();
wwd3.redraw();
wwd4.redraw();
wwd5.redraw();
Thread.sleep(30000);
lat1 = getTimeLon();
}
private static void addComponent(Container container, Component component, int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill)
{
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets, 0, 0);
container.add(component, gbc);
}
이전에 다시 그리는 GL 구성 요소를 사용한 GUI는 본 적이 없습니다. 내가 놓친 게 있니? 이것은 레이아웃 문제입니까? 또는 다시 그리는 것과 관련이 있습니까?
덕분에, -B
+1 rel. 예 어떻게 Thread.sleep (int) 블록 EDT http://stackoverflow.com/a/7944388/714968 – mKorbel
아 감사합니다. 그것은 트릭을했다. 나는 여전히 GUI에 익숙해 져있다. 스레드를 뒤에서 살펴볼 것입니다. 머리를 가져 주셔서 감사합니다. – Brandon
@Brandon : 천만에요. GridBagLayout에 대한 문제 중 일부는 모든 구성 요소에 동일한 가중치 및 가중치 상수를 제공한다는 것입니다. 따라서 GUI가 확장되면 모든 구성 요소가 증가합니다. 그리고 같은 앵커와 채우기를 사용합니다. 나 자신, 나는 GridBagLayout을 사용하고 필요하지 않는 한 그것을 피하는 것이 싫다. –