2014-11-23 6 views
0

저는 현재 구축중인 응용 프로그램의 GUI를 디자인하기 위해 Spring Layout을 사용하고 있습니다. 스프링 레이아웃 문제가 있습니다.SpringLayout의 간격이 정확하지 않습니다.

package com.cliff777.chat; 

import java.awt.Container; 
import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SpringLayout; 

public class ChatMain 
{ 
final int WIDTH = 800; 
final int HEIGHT = 600; 

JTextField messageBox = new JTextField(); //write a message in 
JTextArea chatBox = new JTextArea(); //displays the messages 
JButton sendButton = new JButton("Send"); 

void setupGui(Container container) 
{ 
    container.setPreferredSize(new Dimension(WIDTH, HEIGHT)); 

    SpringLayout layout = new SpringLayout(); 
    container.setLayout(layout); 

    container.add(messageBox); 
    container.add(chatBox); 
    container.add(sendButton); 


    layout.putConstraint(SpringLayout.NORTH, chatBox, 5, SpringLayout.NORTH, container); 
    layout.putConstraint(SpringLayout.WEST, chatBox, 5, SpringLayout.WEST, container); 
    layout.putConstraint(SpringLayout.EAST, chatBox, 5, SpringLayout.EAST, container); 
    layout.putConstraint(SpringLayout.SOUTH, chatBox, 5, SpringLayout.NORTH, messageBox); 
    layout.putConstraint(SpringLayout.SOUTH, chatBox, 5, SpringLayout.NORTH, sendButton); 

    layout.putConstraint(SpringLayout.WEST, messageBox, 5, SpringLayout.WEST, container); 
    layout.putConstraint(SpringLayout.SOUTH, messageBox, 5, SpringLayout.SOUTH, container); 
    layout.putConstraint(SpringLayout.EAST, messageBox, 5, SpringLayout.WEST, sendButton); 

    layout.putConstraint(SpringLayout.EAST, sendButton, 5, SpringLayout.EAST, container); 
    layout.putConstraint(SpringLayout.SOUTH, sendButton, 5, SpringLayout.SOUTH, container); 



    //container.add(messageBox); 
    //container.add(chatBox); 
    //container.add(sendButton); 


} 

public ChatMain() 
{ 
    JFrame frame = new JFrame("Chat"); 

    setupGui(frame.getContentPane()); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 

    chatBox.setEditable(false); 

    while(true) 
    { 
     chatBox.setText(chatBox.getText() + messageBox.getText()); 
     messageBox.setText(""); 

     try 
     { 
      Thread.sleep(5000); 
     } 
     catch (Exception e) 
     { 

     } 
    } 

} 

public static void main(String[] args) 
{ 
    new ChatMain();  
} 
} 

답변

0

바람직 선언 :

여기 Spring Layout Issue

은 응용 프로그램 코드는 다음의 구성 요소는 정확한 후 사이의 간격, 즉 메일 박스와 그림에서 보이는 바와 같이 송신 버튼이없는 크기 container.setPreferredSize(new Dimension(WIDTH, HEIGHT));은 레이아웃이 컨테이너의 너비와 높이를 알고 있음을 자동으로 의미하지 않습니다. 실제로 레이아웃은 폭과 높이를 알고 있지만 창 크기 조정시 어떻게 동작하는지 알고 싶어합니다. SpringLayout은 크기를 무시하고 할 수있을 때마다 그것을하고 싶어한다. 프로그램에서

// set the borders of chatBox 
layout.putConstraint(SpringLayout.NORTH, chatBox, 5, SpringLayout.NORTH, container); 
layout.putConstraint(SpringLayout.WEST, chatBox, 5, SpringLayout.WEST, container); 
layout.putConstraint(SpringLayout.EAST, chatBox, 5, SpringLayout.EAST, container); 

// set the borders of messageBox 
layout.putConstraint(SpringLayout.NORTH, messageBox, 5, SpringLayout.SOUTH, chatBox); 
layout.putConstraint(SpringLayout.WEST, messageBox, 5, SpringLayout.WEST, container); 

// set the borders of sendButton 
layout.putConstraint(SpringLayout.NORTH, sendButton, 5, SpringLayout.SOUTH, chatBox); 
layout.putConstraint(SpringLayout.WEST, sendButton, 5, SpringLayout.EAST, messageBox); 

// the most importent part set the borders of container (you need only bottom-right) 
layout.putConstraint(SpringLayout.EAST, container, 5, SpringLayout.EAST, sendButton); 
layout.putConstraint(SpringLayout.SOUTH, container, 5, SpringLayout.SOUTH, sendButton); 

가장 큰 문제는 컨테이너와 결과 이상 중복 명확 경계하지 않았다 :
다음 제약 사람은 당신이 필요로 할 수있다.

더 복잡한 작업의 경우 GridBagLayout 방향으로 보일 수 있습니다.

관련 문제