2012-02-27 9 views
1

スイングでアブソリュートレイアウトのスクロールバーを使用することはできません。スイングでアブソリュートレイアウトのスクロールバーを使用する

私はこのレイアウトを使用したくないですが、ボタンをクリックしてパネル上に動的オブジェクトを表示し、setBoundsを使ってそれらを整列させる必要があります。

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

public class clothes2 extends javax.swing.JFrame { 

    JTextField n=null; 
    JButton m=null; 

    public clothes2(){ 
     initComponents(); 
    } 

    public void initComponents() { 
     Container contentPane = getContentPane(); 
     contentPane.setLayout(new BorderLayout()); 
     final JPanel jp = new JPanel(); 
     contentPane.setPreferredSize(new Dimension(320,200)); 
     jp.setLayout(null); 
     m=new JButton("add"); 
     m.setBounds(0,0,50,50); 
     jp.add(m); 
     m.addMouseListener(new MouseAdapter() { 

      int x=0; 
      int y=0; 

      public void mouseClicked(MouseEvent me){ 
       x+=100; 
       y+=100; 
       jp.add(n=new JTextField("Name")); 
       n.setBounds(x, y, 50, 50); 
       jp.add(n=new JTextField("code")); 
       x+=100; 
       n.setBounds(x,y, 50, 50); 
       jp.revalidate(); 
       jp.repaint(); 
       x=0; 
      } 
     }); 

     int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS; 
     int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS; 
     JScrollPane jsp = new JScrollPane(jp, v, h); 
     contentPane.add(jsp, BorderLayout.CENTER); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       JFrame f= new clothes2(); 
       f.setVisible(true); 
       f.setSize(640,320); 
      } 
     }); 
    } 
} 
+1

_Iを追加 - 単にあなたが手動でやっている:-)それに従う、良いアイデアを(大きさ、位置、合わせ)の仕事を_is_ LayoutManagerで、そのジョブを適切に実行するものを探します。 – kleopatra

+0

このコードは、GUIの左上隅から始まる列に一連の大きい正方形のテキストフィールド(すべて同じ幅と高さ)を作成しようとしているようです。あれは正しいですか? 「 –

答えて

1

コンテナの推奨サイズを設定します。

+0

男は、私は、これは私のコードへのリンクである 同様 https://www.yousendit.com/download/M3BuS3hmYWJlM1M5TE1UQw 感謝 –

+0

を推奨サイズを試してみましたが、私は前にも推奨サイズを試してみましたが、それはdidnの仕事。コードを親切にチェックしてください。 「 –

1

JScrollBarはスクロールバーの大きさと、表示する必要があるかどうかを判断するために、内部のコンポーネントの推奨サイズを使用します。

通常、レイアウトマネージャはpreferredLayoutSizeメソッドを使用してこれを処理します。これは、コンポーネントの推奨サイズを明示的に設定することによってオーバーライドできます。

したがって、希望のサイズを設定するか、またはそれを計算するカスタムレイアウトマネージャを使用する必要があります。

here

はあなたを助けるかもしれないも参照してください。

+0

男は、私は、これは私のコードへのリンクである 同様 https://www.yousendit.com/download/M3BuS3hmYWJlM1M5TE1UQw 感謝 –

+0

を推奨サイズを試してみましたが、私は前にも推奨サイズを試してみましたが、それはdidnの仕事。コードを親切にチェックしてください。 –

+0

コードが1KB未満の場合は、リンクするのではなく質問に編集してください! (私はそれをやったことがあります) –

2

動的オブジェクトを表示します。これは、このレイアウトのみを使用して行うことができます(私は推測します)。

あなたは間違っていると思います。

実行時にPLAFを変更できるだけでなく、新しいコンポーネントを動的に追加するthis GUIを参照してください。。 ...

をクリックし

  1. にこの例を別のラベルを追加GridLayoutに新しいラベルを追加します - しかし、原則的には、任意のレイアウト(または任意のコンポーネント)についても同様です。
+0

私は言いたいことは、私は動的オブジェクトを置くことです!はい、他の人も同様に行うことができます!合意したグリッドレイアウトで試しました。 しかし、私はマージンを提供する必要があります。それらを適切に整列させる必要があります。 パネル上にオブジェクトを投げるだけではありません。だから私はsetBounds を使うことができるように絶対レイアウトを使用しています。 グループのレイアウトも検索しましたが、動的オブジェクトを追加できませんでした。 –

+0

*「パネルにオブジェクトを投げるのではなく」。もちろん、パネルに投げつけるのではなく、正確に配置しますか?言葉で言えば、私は、動的な方法でそのコンポーネントの配置に対応するJ2SEまたは第三者のレイアウトを決定できると確信しています。私は 'GridLayout'があなたのユースケースの究極の答えであるということを意味しませんでした。なぜなら今回は少し大きめにしました。この例では、新しいラベルをGridLayoutに追加していますが、 *任意のレイアウト**(または任意のコンポーネント)。* –

0

このlayout_使用したくないレイアウト
jp.setLayout(new FlowLayout());