2014-12-17 2 views
1

기능을 무시하십시오. GUI에만 관심이 있습니다.다음 코드에서 JTextArea 및 JTextField의 크기를 원하는대로 설정하는 방법은 무엇입니까?

mainPanel이라는 JPanel 구성 요소를 사용하고 receivingWindow라는 JTextArea와 sendWindow라는 JTextField를 추가했습니다.

receivingWindow = new JTextArea(50,50); 
sendWindow = new JTextField(30); 

가 어떻게 내 마음에 드는 크기를 설정하는 :

receiveWindow 및 sendWindow는 다음 줄에 자신의 크기를 지정하는 날에도 불구하고 전체 프레임 공간을 차지?

코드에서 지정된 무엇
package hf; 

import java.io.*; 
import java.net.*; 
import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 
import javax.swing.event.*; 

public class ChatClient 
{ 
    private JFrame frame; 
    private JTextArea receivingWindow; 
    private JTextField sendWindow; 
    private JButton sendButton; 
    private JPanel mainPanel; 
    private Socket connectionSocket; 
    private final static int serverPortNumber = 5000; 
    private PrintWriter printWriter; 
    private BufferedReader incomingReader; 
    private InputStreamReader incomingInputStreamReader; 
    private JScrollPane scrollPane; 

    public static void main(String[] args) 
    { 
     ChatClient chatClient = new ChatClient(); 
     chatClient.startUp(); 
    } 

    public void startUp() 
    { 
     setUpGui(); 
     setUpNetworking(); 
     handleEvents(); 
     setUpListenerThread(); 
     displayFrame(); 
    } 

    private void setUpGui() 
    { 
     frame = new JFrame("Chat Client"); 
     receivingWindow = new JTextArea(50,50); 
     sendWindow = new JTextField(30); 
     sendButton = new JButton("Send"); 
     mainPanel = new JPanel(); 
     mainPanel.setLayout(new BoxLayout(mainPanel,BoxLayout.PAGE_AXIS)); 
     scrollPane = new JScrollPane(receivingWindow); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     mainPanel.add(scrollPane); 
     mainPanel.add(sendWindow); 
     mainPanel.add(sendButton); 
     frame.getContentPane().add(BorderLayout.CENTER, mainPanel); 
    } 

    private void handleEvents() 
    { 
     sendButton.addActionListener(new MySendButtonListener()); 
    } 

    private void setUpNetworking() 
    { 
     try 
     { 
      connectionSocket = new Socket("127.0.0.1",serverPortNumber); 
      printWriter = new PrintWriter(connectionSocket.getOutputStream()); 
      incomingInputStreamReader = new InputStreamReader(connectionSocket.getInputStream()); 
      incomingReader = new BufferedReader(incomingInputStreamReader); 
     } 
     catch(Exception ex) 
     { 
      System.out.println("Error in connecting to the server."); 
     } 
    } 

    private class MySendButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      String message = sendWindow.getText(); 
      printWriter.println(message); 
      printWriter.flush(); 
      sendWindow.setText(""); 
      sendWindow.requestFocus(); 
     } 
    } 

    private void setUpListenerThread() 
    { 
     try 
     { 
      Runnable incomingThread = new IncomingMessageRunnable(); 
      Thread thread = new Thread(incomingThread); 
      thread.start(); 
     } 
     catch(Exception ex) 
     { 
      System.out.println("Error in setting up thread for listening to incoming menssages."); 
     } 
    } 

    private class IncomingMessageRunnable implements Runnable 
    { 
     public void run() 
     { 
      String incomingMessage = null; 
      try 
      { 
       while((incomingMessage = incomingReader.readLine())!=null) 
       { 
        receivingWindow.append(incomingMessage+"\n"); 
       } 
      } 
      catch(Exception e) 
      { 
       System.out.println("Error in receiving incoming messages"); 
      } 
     } 
    } 

    private void displayFrame() 
    { 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(500, 500); 
     frame.setVisible(true); 
    } 
} 
+1

BoxLayout 최소, 최대 및 권장 크기로 작업, 힌트 - JScrollPane – mKorbel

+0

@mKorbel, 좀 더 구체적으로 말씀해 주시겠습니까? 나는 초보자이다. – user3760100

+3

* "기능을 무시하십시오. GUI에만 관심이 있습니다."* 게시하기 전에 제거하면 쉽게 수행 할 수 있습니다. 더 나은 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (최소 완성 입증 가능 사례) 또는 [SSCCE] (http://www.sscce.org/) (간략히, 자체 포함 , 올바른 예). –

답변

2

각각 정말 패널의 크기가 아니라 얼마나 많은 행과 열 또는 열 당신의 JTextFieldJTextArea하지 있습니다

여기에 전체 코드입니다. 부터 Oracle Docs : 당신의 BoxLayout 패널로 패널에 추가 모든 구성 요소를 맞는 최대 크기를 존중하면서 수직으로 정렬하기 때문에

JTextArea(int rows, int columns) 
    Constructs a new empty TextArea with the specified number of rows and columns. 

JTextField(int columns) 
    Constructs a new empty TextField with the specified number of columns. 

귀하의 구성 요소

전체 화면 공간을 차지하는 당신은 어떤을 설정하지 않았기 때문에 그들은 전체 공간을 채우고있는 것처럼 보입니다.

필자는 픽셀 완벽한 GUI를 보관하려고하지 않고 오히려 마음에있는 것을 보관하는 데 더 나은 LayoutManager을 찾으려고합니다. A Visual Guide to Layout Managers을보고 귀하의 요구에 가장 적합한 레이아웃을 찾으시기 바랍니다.

+0

"아무 것도 설정하지 않았으므로 나타납니다 ...". 행과 열의 값을 설정하면 행과 열의 수가 텍스트 필드와 영역의 크기를 결정합니다. 더 많은 행이있는 영역은 더 많은 크기를 차지합니다. 그 영역이 3 행을 가져야한다고 언급한다면, 그 영역의 크기를 단지 3 행으로 제한 할 것이지만, 분명히 그렇게되지는 않을 것이라고 생각합니다. 그러나, 크기를 설정하는 방법이 있다면, 어떻게 말해야합니까? 하기 위해서. 나는 모른다. 또한 위의 경우와 같이 Java에서 이러한 값을 무시하는 경우 행과 열을 설정하는 지점이 있습니까? – user3760100

관련 문제