2011-10-13 8 views
2

私のフレームの一部にJTextAreaが含まれていると予想しますが、それは完全に占有しています。私はここでエラーを追跡することはできません。なぜこのコードのJTextAreaがJFrame全体を占有するのですか?

import java.awt.*;  
import javax.swing.*; 

public class EchoServer 
{ 
    public static void main(String args[]) 
    { 
     CalcFrame c = new CalcFrame(); 
     CalcTextArea a = new CalcTextArea(); 
    } 
} 

class CalcTextArea 
{ 
    JTextArea historyDisplayer = new JTextArea("",50,20); 
    CalcTextArea() 
    { 
      //historyDisplayer.setVisible(true); 
      historyDisplayer.insert("Hello World", 0);    
      Color bg = new Color(23,34,56);    
      historyDisplayer.setBackground(bg);    
      historyDisplayer.setBackground(bg); 
    }  
} 

class CalcFrame extends CalcTextArea 
{ 
    JFrame frame = new JFrame(); 
    CalcFrame() 
    { 
     frame.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); 
     frame.setTitle("CALCULATOR"); 
     frame.setVisible(true); 
     frame.add(historyDisplayer); 

    } 
    private static int DEFAULT_WIDTH = 299,DEFAULT_HEIGHT = 190; 
} 
+2

'frame.setLayout(null); frame.add(historyDisplayer);'を試してください。実際はレイアウトマネージャを使用する必要があります。 –

+1

@BalaRねえ..なぜヌルレイアウトをお勧めしますか?あなたはそれが喜びなく多くの痛みを引き起こすのは罪だと知っています;-)投稿のための – kleopatra

+0

+1 http://sscce.org/ – mKorbel

答えて

7

JFrameデフォルトではBorderLayoutが使用されます。 BorderLayoutコンポーネント(JFrameなど)に何かを追加すると、BorderLayoutの中心に追加されます(コンポーネントを追加する場所を指定しなかった場合)。JFrame全体を占有します。

調整するには、正しいlayoutを使用してください。

0

絶対配置を試すことができます。それはレイアウトパレットにあります。

かでそれを有効にします。

frame = new JFrame(); 
... //your code here 

// to set absolute layout. 
frame.getContentPane().setLayout(null); 

この方法は、あなたが自由にどこでもあなたが好きなコントロールを配置することができます。

関連する問題