JScrollPaneのオブジェクトは位置位置

このQ&Aのポイント
  • JScrollPaneに配置すると、JPanel内のJTextAreaの配置が横一列になってしまいます。
  • JScrollPaneを作成している部分に問題がある可能性があります。
  • JScrollPaneの設定を見直して、JTextAreaが縦一列になるように修正する必要があります。
回答を見る
  • ベストアンサー

JScrollPaneのオブジェクトは位置位置

JScrollPaneについて、質問させて頂きます。 JScrollPaneに、JTextAreaを縦一列に配置したJPanelを追加しようとしたのですが、何故かJScrollPaneに配置すると、JPanel内のJTextAreaの配置が横一列になってしまいます。 つまり、現在は TEST1 TEST2 TEST3 TEST4....(JTextAreaを並べたJPanelです) となっているJScrollPaneを Test1 Test2 Test3 Test4 のように表示したいのです。 大学の授業に絡むコードですので全てを貼付けるとネットから拾ってきたのではと思われてしまうため、全ては貼付けられませんがコードの一部を張りつけさせて頂きます。 まずはJScrollPaneの設定ですが private JScrollPane getScroll() { if (scroll == null) { scroll = new JScrollPane(innerHomeTimeLine); scroll.setPreferredSize(new Dimension(width, height)); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.setWheelScrollingEnabled(true); } return scroll; } としてJScrollPaneを作成しています、innerHomeTimeLineはJTextAreaを縦一列に並べたJPanelです。 このJScrollPaneを this.add(getScroll(),BorderLayout.NORTH); でJPanelに追加し、そのJPanel(homeTimeLine)をthis.add(homeTimeLine,BorderLayout.CENTER); でJAppletに追加し、表示しています。 JPanel(innerHomeTimeLine)そのものをJAppletに追加すると縦一列に並んだまま表示出来るのは確認しているので、JScrollPaneの設定の問題だと思うのですが、どうすれば良いのでしょうか.... やり方をご存知の方がいましたら、解答して頂けると助かります、宜しくお願いします。 さすがにこのコードだけでは解答は無理、といったことでしたら、必要な部分を教えて頂ければ、抜き出して追記させて頂きます。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.1

縦一列に並べた、ということですが、 JTextAreaを貼り付けるJPanelのレイアウトマネージャは何を使っていますか。 JPanelのデフォルトだとするとFlowLayoutになりますが、 それは横に並べるものになります。 JAppletに貼り付けて縦に並んで見えたのは、 折り返されたからかもしれません。 レイアウトマネージャをsetLayout で GridLayoutとかBoxLayoutとかにしてみてはどうでしょうか。

bloodfog
質問者

お礼

失礼しました、ソースコードを見直したところ、setLayoutを二カ所で行っていて、その片方が先ほど補足した状態になっていただけで、もう一カ所はご指摘の通りFlowLayoutのままでした。 その部分を改善したところ、無事に想定していた動作が行われました、ありがとうございます。

bloodfog
質問者

補足

解答ありがとうございます。 確認してみましたが innerHomeTimeLine.setLayout(new BoxLayout(innerHomeTimeLine, BoxLayout.PAGE_AXIS)); となっていましたので、レイアウトマネージャは関係ないようです、引き続き色々試してみます。

関連するQ&A

  • JScrollPaneの細かい設定について

    JScrollPaneのViewPortにJTextAreaを追加したとします。 JScrollPane pane_txt = new JScrollPane(); JTextArea txt = new JTextArea(); pane_txt.setViewportView(txt); このテキストに次々と文字列が追加された場合、作成されるScrollバーがそれについてくる(カレントな行が必ずView内に表示される)ようにするにはどうすればよいのでしょうか? また、その逆(ついてこさせない)をするにはどうすればよいのでしょうか? アドバイスお願いします。

    • ベストアンサー
    • Java
  • JTextAreaを持ったJInternalFrameを作りたい

    swingでメモ帳を作っているのですが、 新規作成が押されるごとに新しい JTextAreaを持ったJInternalFrameを作りたいのです。 他にもコピーやJpopupメニューなども機能として 追加しているのですがそれらの機能も新しく作った JInternalFrameで機能するようにしたいんです。 参考になるサイトなど見たりしたんですが 自力では無理でした。。どなたかお願いします☆ public class NotePad extends JFrame{ JDesktopPane desktop = new JDesktopPane(); static JTextArea editArea = new JTextArea(); static NotePad frame = new NotePad(); public static void main(String[] args){ frame.setTitle("メモ帳"); frame.setSize(500,400); frame.setVisible(true); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); } public NotePad(){ JScrollPane sp = new JScrollPane(editArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); NewAction newAction = new NewAction(); JMenuBar mb = new JMenuBar(); JMenu mn1 = new JMenu("ファイル"); mn1.add(newAction); mb.add(mn1); setJMenuBar(mb); getContentPane().add(sp, BorderLayout.CENTER); } class NewAction extends AbstractAction{ NewAction(){ putValue(NAME, "新規ファイル作成"); public void actionPerformed(ActionEvent e){ JInternalFrame inframe = new JInternalFrame( true, true, true, true); JTextArea ta = new JTextArea(""); JScrollPane sp2 = new JScrollPane(ta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); inframe.getContentPane().add(spane) desktop.add(inframe); inframe.setVisible(true); }

    • ベストアンサー
    • Java
  • javaで2パネルにテーブルデーターを表示

    今日は! javaの初心者で、初心者なりに、フレームに2個のパネルを作成し、各パネルに同じ テーブルデーターを表示するコードを作ってみましたが、旨く行きません。 下記の添付コードで、不具合点の改造箇所をお教え頂けますと大変助かります。 //================================== package packageA; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; public class JTableTest2 extends JFrame{ public static void main(String[] args){ JTableTest2 test = new JTableTest2("JTableTest2"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } JTableTest2(String name){ setBounds( 0, 0, 300*2, 140*2); setTitle(name); String data[][] = { //テーブルデータを作る {"田辺太郎","89","79","100","100"}, {"山田大助","68","55","72","100"}, {"佐藤恵美","78","69","81","100"} }; //列名の配列 String title[] = {"名前","数学","英語","国語","音楽"}; JTable table = new JTable(data,title); //テーブルデータと列名でテーブルを作る JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JScrollPane sp = new JScrollPane(table); sp.setPreferredSize(new Dimension(250, 80)); p1.add(sp); //JPanelにJScrollPaneを結合する p2.add(sp); //JPanelにJScrollPaneを結合する getContentPane().add(p1, BorderLayout.WEST); getContentPane().add(p2, BorderLayout.EAST); } } 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • JAVAの正解・誤解判定の宣言が分かりません

    class ListPanel extends JPanel implements ActionListener{ JButton button1; JList list1; String[] data = {"( A )","( B )" ,"( C )" ,"( D )" }; ListPanel() { button1 = new JButton("選択OK"); button1.addActionListener(this); list1 = new JList(data); list1.setFixedCellWidth(100); JScrollPane scroll1 = new JScrollPane(list1); scroll1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scroll1.setPreferredSize(new Dimension(150,80)); scroll1.setBorder(BorderFactory.createEtchedBorder() ); scroll1.setBorder(BorderFactory.createTitledBorder("選択肢") ); JPanel p1 = new JPanel(); p1.add(scroll1); JPanel p2 = new JPanel(); p2.add(button1); this.add(p1); this.add(p2); } public void actionPerformed(ActionEvent e1) { if (e1.getSource() == button1) { if (list1.getSelectedItem() == ( C ) ) { JOptionPane.showMessageDialog(null, "あなたが選択した解答" , " 正解です!",JOptionPane.INFORMATION_MESSAGE); } else if (list1.getSelectedItem() != ( C ) ){ JOptionPane.showMessageDialog(null, "あなたが選択した解答", "間違いです!解答は( C )です" , JOptionPane.INFORMATION_MESSAGE); list1.getSelectedItem() == ( C ) ) { の宣言が間違っているようです。何卒よろしくお願いいたします。どこが間違っているか指摘していただければ幸いです。どうか、よろしくお願いします。

  • SwingでgetContentPaneのエラーです、お願いします

     今晩は、java勉強中のものです、宜しくお願いします。  下のようなプログラムを組んでみましたが、「型JFrameから非staticメソッドgetContentPane()にstatic参照 することは出来ません」というエラーコードです。  原因が良く分かりません、どなたか教えて下さい。  いくら考えても原因がよく分かりません、宜しくお願いします。 ================================================================ public class Panel_train extends JFrame{ public static void main(String[] args) { Container cnt = getContentPane(); JPanel jpanel = new JPanel(); JTextArea jtext = new JTextArea("Hello World", 100, 50); jpanel.add(jtext); cnt.add(jpanel, BorderLayout.CENTER); JFrame frame = new JFrame("テスト"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 100); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • キャレットの幅を設定したい。

    キャレットの幅を設定したい。 以下のソースで色を設定するメソッドはありますが、 キャレットの幅の設定の仕方が解りませんでした。 ご存じの方がおられましたら教えてください。 import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; class test extends JFrame{ public static void main(String args[]){ new test(); } test(){ this.setSize(300, 250); JPanel p = new JPanel(); JTextArea area2 = new JTextArea("test", 10, 10); area2.setCaretColor(Color.RED); p.add(area2); this.add(p, BorderLayout.CENTER); this.setVisible(true); } }

    • ベストアンサー
    • Java
  • Swing のJScrollPane について教えてください

    現在、Swing を使用して以下の様な処理のアプレットを作成しています。 ---------------------------------------------------------------  // 画面構成  JPanel p = new JPanel();  JScrollPane sp = new JScrollPane(   p,   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED  ); ---------------------------------------------------------------  // パネルサイズの調整  public void resizePanel()  {   p.setPreferredSize(new Dimension(400, 少しづつ増やす));   p.revalidate();  } ---------------------------------------------------------------  // 一番下までスクロールさせる  public void scrollToMaximun()  {   JScrollBar sb = sp.getVerticalScrollBar();   sb.setValue(sb.getMaximum());  } --------------------------------------------------------------- 処理内容は、発生したデータを JPanel に時系列に描画していき、 常に一番下までスクロールさせるという物です。 具体的には、データが発生する度に、描画 & resizePanel() & scrollToMaximun() を行います。 その際、スライダが、一番下までスクロールされず、前回のサイズの 最大値に設定されてしまいます。 根本的なやり方がマズイのか、何がが足りないのかも分からない状態です。 申し訳ございませんが、ご教授頂いたいと思います。

    • ベストアンサー
    • Java
  • テキストエリアの大きさをドラッグで調節したい

    _____________________________ || | | | etc | | | ============================= | | | JTextArea | | | | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 上の図の=の部分を上下にドラッグすると、 JTextAreaの大きさを調節できるようにした いのですが、どうしたら良いのでしょうか? ソースは次のようにしています。 JPanel mainPanel = new JPanel(new GridLayout(2,1)); JPanel panel_1 = new JPanel(); panel_1.add(...); : etc部の追加 : mainPanel.add(panel_1); JPanel panel_2 = new JPanel(); panel_2.add(textArea); mainPanel.add(panel_2); getContentPane().add(mainPanel);

  • 引数としてnew Objectを渡したとき、後でObjectをどうやって参照する?

    はじめまして。 以下のようなコードを書いているのですが: class sample extends JScrollPane(){ //コンストラクタ public sample(){ super(new JTextArea); } ここでsuper(new JTextArea);としたこのJTextAreaにアクセス したいと考えています。 友達はgetComponentメソッドを使う方法と、「他でnewする」方法が あると言うのですが、この「他でnewする」というのがどういうこと なのかよく分かりません。 そもそも、JTextAreaはsuper(new JTextArea);したとき、どこへ行って しまうのでしょうか?誰にも参照されていないのでしょうか?? 初心者でしてわかりにくい質問ですみません。 何卒よろしくお願いします。

    • ベストアンサー
    • Java
  • Layoutについて

    TextFiledを縦31、横7でレイアウトしたいのですが、 MyPanel(){ EventHandler eh = new EventHandler(this); JPanel ptext = new JPanel(); JPanel pbtn= new JPanel(); 中略 this.setLayout(new FlowLayout()); this.add(ptext,new FlowLayout(FlowLayout.CENTER,0,0)); this.add(pbtn, BorderLayout.SOUTH); とすると、横一列に表示されるのですが、どうしたら 指定したとおりになるのでしょうか? これは、mainで定義してます。 Container cont = frame.getContentPane(); cont.add(panel); よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう