• 締切済み

スクロールバーの高さが設定できない。

下のプログラムでJScrollパネルの矢印部分の大きさが変わるはずなのですが 幅は変わるが高さが変わりません。 JScrollBar scrollBar = new JScrollBar(); JScrollPane scrollPanel = new JScrollPane(); scrollBar.setPreferredSize(new Dimension(40,40)); scrollPanel.setVerticalScrollBar(scrollBar);

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

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.3

> 矢印部分の大きさが変わるはず あっ、そうか。上下のarrow buttonsのサイズを変える、でも、それはありえないでしょう。JScrollBar全体に対するsetPreferredSize()ですから…。やっぱ、UIの自作しかないですね。

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.2

方法は色々あります。コツは2つあります。 1.スクロールペインからのイベントを引き継ぐためにスクロールバーは生成せずに    JScrollBar scrollBar = scrollPanel.getVerticalScrollBar();   で、受け取ってから、場所を移動させます。 2.スクロールバーのサイズを自由に設定するためには、それを可能にする   レイアウトマネジャーを使用します。   下のサンプルでは、スプリングレイアウトを使用してます。 JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(); table.setModel( new DefaultTableModel(100,30) ); table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); table.setValueAt( "ScrollBarTest", 10, 3 ); table.setPreferredSize( new Dimension(3000,3000) ); JScrollPane scrollPanel = new JScrollPane( table ); JScrollBar scrollBar = scrollPanel.getVerticalScrollBar(); scrollBar.setPreferredSize(new Dimension(40,40)); JPanel eastPanel = new JPanel(); eastPanel.setPreferredSize( new Dimension(40,40) ); SpringLayout layout = new SpringLayout(); eastPanel.setLayout( layout ); eastPanel.add( scrollBar ); layout.putConstraint( SpringLayout.WEST, scrollBar, 0, SpringLayout.WEST, eastPanel ); layout.putConstraint( SpringLayout.NORTH, scrollBar, 50, SpringLayout.NORTH, eastPanel ); frame.add( scrollPanel, BorderLayout.CENTER ); frame.add( eastPanel, BorderLayout.EAST ); frame.setSize( 800, 400 ); frame.setVisible( true );

osiete_kun
質問者

お礼

No1に同じく回答ではないですね?しかし何のアドバイスかも不明です。このサンプルを実行したところつまみがなくなっていますが(なんで消したの?)肝心なArrowの高さは変わっていないようです。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

高さはスクロール量に応じて自動的に変わります。 それが嫌なら、UIを自作してください。

osiete_kun
質問者

お礼

それはかなり特殊なOSでは? 少なくともウィンドウズとFedoraでは変わりません。

関連するQ&A

  • スクロールバー

    Javaを始めたばかりの者です。 すごく基本的な質問をさせて頂きます。 恥ずかしいのですが、スクロールバーを付けようとしても付けることができませんでした。 以下がそのプログラムですが、どうすればよいか正直わかりません。よければ教えて下さい。 import java.awt.*; import javax.swing.*; public class ScrolTest { public JPanel panel =new JPanel(); public static void main (String[] argv) { JFrame frame =new JFrame("てすとー"); frame.setSize(50000,6000); Scrollbar scrollbar = new Scrollbar(); frame.add(scrollbar, null); scrollbar.setBounds(new Rectangle(220, 15, 15, 180)); frame.show(); } }

  • JPaneの大きさ変更について

    JPaneに絵をかいて、画面に表示するプログラムを作ろうと思ったんですが、拡大・縮小の機能を入れようとしたところ、JPanelの大きさのせいなのかJScrollPaneのスクロールバーが最後の絵の部分まで行きませんでした。 そこで、JPaneの大きさを絵の大きさに合わせて変更するようにしようと思ったのですが、してみたところエラーが出てきてわからなくなってしまいました。 誰か対処法を教えてください。プログラムは下に貼っときます。 ---------------------------------- public class Hyou extends JFrame { public Hyou() { // タイトルを設定 setTitle(""); // メインパネルを作成してフレームに追加 MainPanel panel = new MainPanel(); JScrollPane spanel = new JScrollPane(panel,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); Container contentPane = getContentPane(); contentPane.add(spanel); pack(); } } class MainPanel extends JPanel implements MouseListener,ActionListener { static int WIDTH = l * 100 + (k2 * 2); static int HEIGHT = h * 100 + (k1 * 2); setPreferredSize(new Dimension(WIDTH, HEIGHT)); JButton bt3 = new JButton("拡大"); bt3.addActionListener(this); bt3.setActionCommand("big"); bt3.setBounds(new Rectangle(160,20,50,30)); this.add(bt3); } //大きさ変更 void chenge_size(){ MainPanel.setBounds(new Dimension(WIDTH,HEIGHT)); } public void actionPerformed(ActionEvent e){ String command_name = e.getActionCommand(); if(command_name.equals("big")==true){ WIDTH *= 2; repaint(); chenge_size(); } } }

    • ベストアンサー
    • 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
  • パネルをスクロールするには?

    パネルをスクロールしたいのです。 ・パネルは高さが条件によって変わります。 ・スクロールは縦です。 以上の事を踏まえて、パネルにスクロールバーを追加しました。しかし、スクロールしてもパネルが上下に動きません・・・ パネルを動かすために必要な事を教えてください。 Scrollbar scrollbar = new Scrollbar(); this.add(scrollbar, null); scrollbar.setBounds(new Rectangle(220, 15, 15, 180)); 以上の事で追加はできたのですが、パネルと連動するにはどんな制御が必要でしょうか?

    • ベストアンサー
    • Java
  • 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
  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • スクロールバーが表示されない。。

    枠つきのスクロールバーをもらい ブログにつけようとしましたが、 なぜか枠だけでスクロールバーだけが表示されません。。 原因はなんでしょうか? 改善の方法はありますか? 下のタグです <div style="width:337;height:200;overflow:auto; scrollbar-3dlight-color:#ff00ff; scrollbar-arrow-color:#ff00ff; scrollbar-darkshadow-color:#ffffff; scrollbar-face-color:#ffffff; scrollbar-highlight-color:#ffffff; scrollbar-shadow-color:#ff00ff; scrollbar-track-color:#ffffff; "> <Table border="1" width="320" height="300" cellspacing="0" bordercolor="#004a95"> <Tr><Td height="30" bgcolor="#004a95" align="left"> <font size="3" color="#ffffff" face="MS ゴシック"> タイトル部分</font> </Td></Tr> <Tr><Td bgcolor="#ffffff" align="center" valign="top"> 内容部分 </Td></Tr> </Table></div>

    • ベストアンサー
    • CSS
  • javaのフレームにサイズがセットされてない?

    前回、http://okwave.jp/qa/q8069621.htmlで質問しました。 回答をもとにframe.setvisible(true)をコンストラクタの最後にするとうまくいき回答を締め切ったんですが・・・。 しかし、mainメソッドにframe.setvisible(true)を書くとフレームのタイトル部分だけとなり、 サイズがセットされないまま実行したときと同じようになってしまいます。 なぜでしょう?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0{ public static void main(String[] args) { Frame0 test=new Frame0(); test.setVisible(true); } } class Frame0 extends JFrame{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • JComboBoxの横幅が変更出来ません

    こんにちは、jdk1.4でswingアプリケーションを作っています。 JPanal2つをBorderLayoutで配置し、WEST側JPanelにJComboBoxその他のコンポーネントを入れて、CENTER側では、コンポーネントは置かずにJPanelに絵を描いています。 全体のサイズを600×400としている時、JComboBoxが400近い横幅をとるので、右の画像表示スペースがかなり狭くなってしまいました。 そこで、それぞれのJPanelをJScrollPaneに埋め込むことにして、なんとか、右の画像表示枠を大きくすることには成功したのですが、JComboBoxのために、いつも左パネルが横スクロール状態になるのが不満です。 JComboBoxに登録している文字列は最大でも半角25文字で、JComboBox内での 半分しか占めていないのに、なぜこんなに大きな幅になるのでしょう? JComboBoxに対して以下の設定も試してみましたが、大きさは変化しませんでした。 setPreferredSize(new Dimension(200,20)); setMaximumSize(new Dimension(200,20)); JComboBox横幅の変更方法に妙案が有れば教えて頂けませんでしょうか。

    • ベストアンサー
    • Java
  • Flash スクロールバー表示

    環境 Win OS XP   Macromedia Flash MX Professional 2004 外部テキストを読み込んでいるんですが ◆スクロールパーツがうまく表示されない …スクロールバーの部分が上下に長い ◆スクロールの反応が悪い …マウスでスクロールできず上下の矢印を押さないと移動できない ◆*.flaだと上下の矢印も表示されない白い棒のまま。 ◆外部テキスト(HTML)が全部スクロールで表示しきれない …もっと文章があるんですがスクロールできるのは数行止まりで それ以上、下へ行かないんです。 サイトや本など色々見たのですが確証あるものがなくご指導いただきたく思いますので よろしくお願いします。 アクション部分は onClipEvent (load) { this.loadVariables("txt.html"); } onClipEvent (data) { scrollbar.setScrollTarget(txt.html); } 初心者なモノで説明不足かもしれませんが どうぞよろしくおねがいします。

    • ベストアンサー
    • Flash

専門家に質問してみよう