2011-07-08 33 views
2

すばやくスローなUIを作成しようとしています。私のUIには、JTextAreaの内容が大きくなる可能性があるため、JTextFields、JScrollPaneのJTextAreaがあります。JLabelのレンダリングを改善するにはどうすればよいですか?

私は単純なBoxLayoutを使用しています。GridBagLayoutで時間を無駄にしたくありませんでした。

私の問題は、ウィンドウのサイズを変更するとJLabelsが大きくなることです。彼らは、大量の空きスペースに1行のテキストを置くことになります。それは醜く見え、無駄です。一方、JTextAreaは、JScrollPaneが余分なコンテンツを処理するため、サイズが増加することはありません。だから私は巨大なJTextFieldsと小さなJTextAreaをスクロールペインに表示し、わずかに1行しか表示しません。

JTextFieldsが1行のテキストを超えて高さを増やさないようにする簡単な方法はありますか?おそらくgetMaximumSize/getPreferredSizeをオーバーライドしますか?もしそうなら、コードはどのようなものでしょうか?

この状況を解決する唯一の機能はJFrame.pack()ですが、ウィンドウサイズが変更される(非常に望ましくない)場合があり、デスクトップに閉じ込められないことがあります。

+0

「すばやく汚いスイングUIを作成しようとしています」スイングUIの他のタイプはありますか? :) –

+0

あまりにも遅い、脂肪、汗だくで、まだ汚れているGridBagLayout :)です。 Javaで深刻なアプリケーションを作成している場合、私はどんなUIを使用すべきですか? –

+0

率直に言えば、スイングは1.4以降、特に1.5と1.6で大幅に改善されました。あなたはデスクトップアプリケーションを開発している場合は、とにかく多くのオプションを持っていない。あなたが持っている他のJavaオプションはSWTとQTです。私はQTを自分で使っていませんが、SWTは大丈夫ですが、SWT開発者があなたのコードを長期間維持することはできません。 –

答えて

2
label.setMaximumSize(label.getPreferredSize()); 

また、getMaximumSize()メソッドをオーバーライドして、適切なサイズを返すことをお勧めします。

実際には、ラベルの最大サイズが推奨サイズなので、私はその提案を元に戻します。しかし、これはBoxLayoutを使用するときなどのJTextFieldのような他のコンポーネントと連携するテクニックです。

SSCCEに問題があることを伝えてください。

編集:

実は、私は問題は余分なスペースがある場合にBoxLayoutの試みは、すべてのコンポーネントの高さを増加させることだと思います。

panel.add(Box.createVerticalGlue()); 

コンポーネントに割り当てられているから余分なスペースを防止するための最後のコンポーネントとして:この問題を解決するには、使用する必要があります。

+0

次のように回答します。 –

+0

@Sid Datia、以下の答えはどういう意味ですか?私はあなたの答えであなたに答えを与えました。実際にあなたの質問はラベル(テキストフィールドではない)に関するものだったので、あなたは適切な質問をしなかったと推測しました。コードを投稿していないので、私はいくつかの提案をしました。そのうちの1人が働いた。 – camickr

+0

私の件名の見出しが間違っています。申し訳ありません。問題はJTextFieldsにあります。コメントにコードなどを投稿したかったのですが、それはうまくいきませんでした。そこで、私が書いたコードで回答を掲載しました。その答えはあなたの答えの下にあります。私がやったことを見直してコメントすることができれば幸いです。 –

0

createVerticalGlue()はO_Oを実行しません。たぶん私は間違っていた。

オーバーライドの最大サイズは素晴らしく機能します。なぜJavaはそれをデフォルトで行うのですか?

public class TextFTest { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     JFrame jf = new JFrame(); 

     class X extends JTextField { 

      public X(String text) { 
       super(text); 
      } 

      @Override 
      public Dimension getMaximumSize() { 
       return new Dimension(super.getMaximumSize().width, 
            getPreferredSize().height); 
      } 

     } 

     jf.getContentPane().setLayout(
       new BoxLayout(jf.getContentPane(), BoxLayout.Y_AXIS)); 

     X f = new X("Hello"); 
     jf.getContentPane().add(f); 

     JTextField f1 = new JTextField("Hello1"); 
     jf.getContentPane().add(f1); 

     jf.getContentPane().add(Box.createVerticalGlue()); 

     jf.validate(); 

     jf.setSize(300, 300); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.setVisible(true); 
    } 

} 

私の恐ろしいコーディング基準を許してください。

関連する問題