
No.4ベストアンサー
- 回答日時:
>早速試してみましたが、やはりダメでした。
>しかし、
>JFrame#setLayout()を追加したところ、きちんと表示されました。
すみません、ダメという状況が具体的に把握できません。
テキストエリアは表示されるが、そのサイズがViewPortに合わせて
可変するということでしょうか?
また、JFrameのレイアウトマネジャーは、デフォルトはBorderLayoutですが、
何を設定されたのでしょうか?
私がテストしてみたサンプルのソースコードを示します。
以下のコードでダメならば、そのダメな内容をより具体的に
示していただければ幸いです。
-- TestTextAreaFrame.java ---
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SpringLayout;
public class TestTextAreaFrame extends JFrame {
public TestTextAreaFrame() {
JTextArea textArea = new JTextArea();
textArea.setPreferredSize(new Dimension(150,200));
textArea.setLineWrap( true );
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().add( textArea );
scrollPane.getViewport().setLayout( new SpringLayout() );
add( scrollPane );
setSize( 200, 100 );
setVisible( true );
}
}
この回答への補足
ご回答ありがとうございます。
>ダメという状況が具体的に把握できません。
すみません。説明不足でした。
これは、テキストエリアは表示されるのですが、1行分のみしかなかったということです。
テキストフィールドにスクロールバーがついた感じです。
設定した大きさと明らかに違うので「ダメ」と表現しました。
また、JFrameのレイアウトマネジャーは設定等何もしておりませんので、デフォルトのままかと思います。
ソースのご提示までして頂いてありがとうございます。
早速試してみましたところ、問題無く表示されました。
JTextAreaとJFrameのwidthの差でテキストエリアとスクロールバーの間に隙間が出来ていましたが・・・まぁサイズ合わせれば済む話ですのでって蛇足でしたね(汗)
蛇足ついでに。ご提示頂いたソースのadd( scrollPane );の部分で、実行時にgetContentPane().add()を使えと怒られてしまいましたが、JDKのバージョン違いによるエラーなんでしょうか?
No.3
- 回答日時:
Javaのレイアウトマネジャーは、非常に便利なようで、使いこなそうとすると、
かなり不思議な振る舞いに苦しまされることもでてきます。
レイアウトマネジャーとしては、複雑な部類に入りますが、
javax.swing.SpringLayoutが多くの場合有用だと思います。
多くのレイアウトマネジャーでは、setSize(...)やsetPrefferedSize(...)は
優先されませんが、SpringLayoutマネジャーではsetPrefferedSize(...)が
最優先されます。
そして、SpringLayoutを使っておけば、上下左右に適当なマージンを
挿入したくなった時などに威力を発揮してくれます。
そこで、
scroll.getViewport().setLayout( new SpringLayout() );
を、適当な位置に挿入し、
text.setSize( dim );
を
text.setPreferredSize( dim );
に置き換えて動作を確認してみてください。
この回答への補足
ご回答、ありがとうございます。
早速試してみましたが、やはりダメでした。
しかし、
JFrame#setLayout()を追加したところ、きちんと表示されました。
なぜなんでしょう?
いくら部品のサイズを指定しても、大本であるフレームのサイズが決まってないから表示されなかったってことなんでしょうか?
質問を重ねてしまって申し訳ないですが、
本日18:00ごろまでこのままにしておきますので、気が向いたらで構いませんので、お答え頂ければ幸いです。

No.1
- 回答日時:
>Dimensionを使ったのですが、setSize()を使っても上手くいきません。
JScrollPaneで使ってもやっぱり上手くいきません。これだけだと、どういうやり方をしているのかがわからないのですが。
例えば、組み込んでいるコンテナのレイアウトマネージャはnullにしてありますか?
この回答への補足
早速の回答、ありがとうございます。
>これだけだと、どういうやり方をしているのかがわからないのですが。
一応、JTextAreaをインスタンス化する際、コンストラクタで文字数によるサイズの指定をしました。終了時のサイズを保存して次回起動時に反映させようと、終了時にJTextArea#getSize()で取得してファイルに保存し、起動時にJTextArea#setSize()で指定したのですが、全く反映されていませんでした。この時のコンストラクタは引数無しを使用しています。ファイルからの取得は出来ているのは確認しましたし、同じ値を手入力しても変わりません。ならばと、JScrollPane#setSize()で同様の事をしても結果は同じでした。Container#setSize()やJFrame#setSize()はきちんと反映されるのですが・・・。
構造としては、JTextAreaを組み込んだJScrollPaneをContainer#add()してあります。それ以外の部品等は一切使用していません。
>組み込んでいるコンテナのレイアウトマネージャはnullにしてありますか?
Container#setLayout()をnullにしてあるかってことですよね?
していません。コンテナそのものが表示されなくなりましたので。
以下、ソースです。
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame{
public static void main(String[] args){ new Test(); }
Test(){
super("簡易エディタ");
Dimension dim = new Dimension(636,391);
//JTextArea text = new JTextArea(18,55);
JTextArea text = new JTextArea();
text.setSize(dim);
JScrollPane scroll = new JScrollPane(text);
scroll.setWheelScrollingEnabled(true); //マウスホイールを有効に
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Container con = getContentPane();
con.add(scroll,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
validate();
setVisible(true);
pack();
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- 日本語 「災害級の暑さ」と言う言い方について 12 2023/08/02 20:36
- 作詞・作曲 無知で申し訳ありませんが、DAW、DTMに強い方ご教授ください。 Logic Proで作成完了した音 1 2022/11/27 18:48
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- Windows 10 Windowsのアイコンの整列が変になりました 2 2022/06/24 00:02
- Windows 10 パスを通す 1 2022/09/10 20:01
- 建設業・製造業 アルミ板や鋼板における定尺サイズは、なぜそのサイズを採用しているのでしょうか? アルミ板の場合、メー 2 2022/09/17 16:53
- 大学受験 高3、march志望です。助けてください...! 古文の模試で3割しか取れませんでしたT^T 今から 6 2022/09/24 09:44
- Word(ワード) Word 見出しの設定が上手くいきません。 2 2023/06/18 10:05
- Windows 10 MicrosoftIMEでトラブル、助けてください m(_._)m 4 2023/05/16 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
JAVA 乱数で同じ数字を出さな...
-
文字列を数式に
-
JAVAのアプレットの文の改行方法。
-
HTMLでのTableタグデータ取得方法
-
Javaで常駐するソフトを作って...
-
Java swing RTFファイル 文字化...
-
setAttribute(String, int)は適...
-
Xercesを使ったjavaでのXML解析
-
【JAVAエラー】互換性のない型...
-
JTabbedPaneのタブが開かれてい...
-
Javaを使ってデジタル時計を作...
-
JavaMailについて
-
Androidで画面遷移ができません.
-
JTableでスクロールバーが表示...
-
文字サイズが可変のラベル
-
javaで画像出力
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
ColabでのPytorchのエラー
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
シャットダウンフックが呼ばれない
-
importするには java.io.*; imp...
-
python OpenPyXLを使って出力結...
-
Javaを使ってデジタル時計を作...
-
HTMLでのTableタグデータ取得方法
-
Java での グローバルIP取得
-
Xercesを使ったjavaでのXML解析
-
JavaMailについて
-
コンパイルができません…
-
GridBagLayoutについての質問
-
透過GIFの判定の仕方ありますか?
-
サーバーAからサーバーBへPOST...
-
ある年月の前月(月の開始日)...
-
jFrameを使って複数の画面を生...
-
文字列を数式に
おすすめ情報