現在、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() を行います。


その際、スライダが、一番下までスクロールされず、前回のサイズの
最大値に設定されてしまいます。
根本的なやり方がマズイのか、何がが足りないのかも分からない状態です。

申し訳ございませんが、ご教授頂いたいと思います。

A 回答 (2件)

 再びatonです。



> スクロールバーの最大値は、JPanelに対しての
>  setPreferredSize();
>  revalidate();
> で自動的に変わる物だと思っていました。

 これを見て思いついたんですが,resizePanel()メソッドの p.revalidate() を this.revalidate() に変えるとListenerなど使う必要がないかもしれません。ただJScrollPaneはデフフォルトでisValidateRoot()にtrueを返すことになっているので,期待薄ですが。

 或いは,resizePanel()メソッドを,

public void resizePanel()
{
p.setPreferredSize(new Dimension(400, 少しづつ増やす));
p.revalidate();
JScrollBar sb = sp.getVerticalScrollBar();
sb.setMaximum(sb.getMaximum() + <pの縦の増加分>)
}

のような感じにすると,もしかしたらうまくいくようになるかもしれません。

この回答への補足

aton さん丁寧な回答ありがとうございます。

早速試してみた所、
 p.revalidate() を this.revalidate() に変えてみましたが結果は同じでした。

 sb.setMaximum(sb.getMaximum() + <pの縦の増加分>)
 を追加した所、スクロールバーの最大値は確かに更新されました。

 しかし、この後で、
  sb.setValue(sb.getMaximum());
 とやってみましたが、どうしても、前回の最大値の部分にしかスライダが移動しませんでした。
 試しに、
  sb.setValue(10000);
 とパネルより大きい固定値を指定してみましたが、結果は同じでした。

この動作から推測すると、sb.setMaximum() は溜まっているイベントを処理した後
にしか、正しく反映されないのではないか?。
という風に思っています。

JPanel の替わりに JTextArea で試してみたら、キチンと最大値にスライダは移動するので、
何等かの方法はあると思っています。

aton さんに頼ってばかりも申し訳ないので、もう少し、調べてみます。
もし、何がお気づきの点などございましたら、よろしくお願いいたします。

補足日時:2001/08/23 16:56
    • good
    • 0

 私もSwing詳しくないんですが,誰も答えないようなので。


 APIドキュメントを読むかぎりでは,JScrollBarはBoundedRangeModelを利用してサイズや位置の設定をしています。BoundedRangeModelには「値(value)」「長さ(extent)」「最小値(minimum)」「最大値(maximum)」の4つの基本プロパティがありますが,ikazinatさんの例ではJScrollPaneのAPIドキュメントでいうところの「scrollable client」=JPanelのサイズが変わる(大きくなる)ので,それに合わせてJScrollBarのmaximumの値も変更してやる必要があるのではないかと思います。
 JPanelにPropertyChangeListenerかなんかを貼り付けて,JPanelのサイズが変更されたらそのイベントがJScrollPaneあるいはJScrollBarに通知されるようにし,それをもとにJScrollBar#setMaximum()してやったあと,JScrollBar#setValue()してみるとよいのではないでしょうか。
 はっきり言って自信はありませんが…。

この回答への補足

aton さん、ご回答ありがとうございます。

スクロールバーの最大値は、JPanelに対しての
 setPreferredSize();
 revalidate();
で自動的に変わる物だと思っていました。
revalidate() の動作がイマイチ分からなかったので自信は
無かったんですけどね・・・。

早速、リスナーを登録しての方法を試してみます。
また何かありましたら、お願いいたします。

補足日時:2001/08/23 13:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qデザインされたスクロールバーについてです

いつもお世話になっています。。

デザインされたスクロールバーを使用したくて、
flexcrollというファイルをダウンロードしました。
こちらのサンプルにあるファイルが使用しているものと同じかと思います
http://lifescape.seesaa.net/article/51751860.html

ファイルは

javascriptのflexcroll.jsと
cssを2ファイルを使用しています。

こちらでページ内に色を指定したスクロールバーを設置できたのですが、

同じスクロールバーをサイズ違いで、同ページ内に2つ設置したい場合、CSSでは指定が一つしかできないので、同じ大きさのスクロールバーしか設置ができません。

javascriptを2つ用意してCSSのクラス名を変更するれば、同ページ内で2種類のスクロールーが設置できるのか??
よくわかりません。。

どうかご教授お願い致します。

Aベストアンサー

ほかのカテゴリでも同じような質問をなさっているみたいですが、どちらかにしたほうがよろしいかと…


試していませんが(画像を揃えたりが面倒なので)、覗いてみたところ、

参照なさっているページのリンク先のページでは同じページ内に違う種類のスクロールバーを適用しているみたいですね。
それぞれのdivのidがtest1、test2、test3となっていますが、それに対するCSSの設定ファイルがflexcrollstyles.cssだと思われます。

これを見てみると、マスターの設定のあとに「/* Extra sample styles */」として個々のid下でスクロール関係のクラスのスタイル設定が別にされているようですので(test2とtest3のみ)、このような設定をしておいて
 CSBfleXcroll('test1');
のように指定すれば適用できるのではないでしょうか?
(参照ページがそのような方法をとっていると思われるので)

ほとんど説明などを読んでいないので(英語が苦手)、かなり適当な推測ですが、質問者様はすでに設置はできているとのことなので、その情報で補ってくだされば、いけそうな気がしますが…(←少々無責任か?)

ほかのカテゴリでも同じような質問をなさっているみたいですが、どちらかにしたほうがよろしいかと…


試していませんが(画像を揃えたりが面倒なので)、覗いてみたところ、

参照なさっているページのリンク先のページでは同じページ内に違う種類のスクロールバーを適用しているみたいですね。
それぞれのdivのidがtest1、test2、test3となっていますが、それに対するCSSの設定ファイルがflexcrollstyles.cssだと思われます。

これを見てみると、マスターの設定のあとに「/* Extra sample styles */」...続きを読む

QAppletのpublic void paint(Graphics g)

は抽象クラスのGraphicsのオブジェクトを引数に持ちますが抽象クラスはオブジェクトを発生できないのに何故オブジェクトを渡せるのでしょうか?

Aベストアンサー

実際にパラメータとして渡されるのは、Graphicsのサブクラスのインスタンスだからです。

Graphics クラスは抽象クラスですが、そのサブクラスは抽象クラスとは限りません。

Qfirefox3.6で、スクロールバーの色やデザインを変更したいです。

firefox3.6で、スクロールバーの色やデザインを変更したいです。
どのページを見ていても常に変更後のデザインを適用したいと思っています。

userchrome.cssを使えばよいのかな、と思ったのですが
設定方法がよく分かりませんでした。
どなたか変更方法をご存知の方教えていただけましたら幸いです。

firefoxのスクロールバーの色変更 - ブラウザ - 教えて!goo
http://oshiete.goo.ne.jp/qa/3042955.html

↑同様の質問を拝見し、試してみたのですがうまくいきませんでした…

想定環境はWindows7とXPです。

意味不明でしたら加筆修正しますのでよろしくお願いします。

Aベストアンサー

/*スクロールバーとボタンの色(エメラルドグリーン)*/
scrollbarbutton,
thumb {
-moz-appearance:none !important;
background-color:#0e9 !important;
border-top:1px solid #3fc !important;
border-right:1px solid #0a3 !important;
border-bottom:1px solid #0a3 !important;
border-left:1px solid #3fc !important;
-moz-border-top-colors:none !important;
-moz-border-right-colors:none !important;
-moz-border-bottom-colors:none !important;
-moz-border-left-colors:none !important;
}
/* スクロールバーにマウスオーバー時の色*/
thumb:hover{
border-top:1px solid #6fc !important;
border-right:1px solid #0c9 !important;
border-bottom:1px solid #0c9 !important;
border-left:1px solid #6fc !important;
-moz-border-top-colors:none !important;
-moz-border-right-colors:none !important;
-moz-border-bottom-colors:none !important;
-moz-border-left-colors:none !important;
background-color:#3fb !important;
}
/* スクロールボタンにマウスオーバー時の色*/
scrollbarbutton:hover:active,
scrollbarbutton:active {
border-top:1px solid #0c9 !important;
border-right:1px solid #6fc !important;
border-bottom:1px solid #6fc !important;
border-left:1px solid #0c9 !important;
-moz-border-top-colors:none !important;
-moz-border-right-colors:none !important;
-moz-border-bottom-colors:none !important;
-moz-border-left-colors:none !important;
background-color:#3fb !important;
}
scrollbarbutton {
background-repeat:no-repeat !important;
background-position:center center !important;
}
/* レールの色 */
slider {
background-color:#ffc !important;
-moz-border-left-colors:none !important;
-moz-border-bottom-colors:none !important;
border-style:none !important;
}
slider[orient="vertical"] {
background-color:#ffc !important;
-moz-border-left-colors:none !important;
border-style:none !important;
}

/*スクロールバーとボタンの色(エメラルドグリーン)*/
scrollbarbutton,
thumb {
-moz-appearance:none !important;
background-color:#0e9 !important;
border-top:1px solid #3fc !important;
border-right:1px solid #0a3 !important;
border-bottom:1px solid #0a3 !important;
border-left:1px solid #3fc !important;
-moz-border-top-colors:none !important;
-moz-border-right-colors:none !important;
-moz-border-bottom-colors:none !important;
-moz-border-left-co...続きを読む

Qpublic static void main(String args

public static void main(String args[]) {

public static void main(String[] args) {
は何が違います?

Aベストアンサー

何も違いません。

javaでは配列を宣言する時に、型の後ろに[]をつけても
変数名の後ろに[]を付けてもどちらでもいいことになっています。

QWebデザイン時のスクロールバー

Xhtmlとcssでwebサイトを作っています。そのサイトは4ページで3つは高さ768pxでスクロールバーがでないのですが1つは情報量の違いで高さありスクロールバーがでます。その時にスクロールバーの分だけずれます。全ページがセンター固定です。

ページ移動をしたときに1ページだけ横に少しずれるので気になります。この状態を解決するにはどうすれば良いのですか?良い方法がなければずれは諦めようと思ってます。

わかる方がいたら教えて頂けたら幸いです。お願いします。

Aベストアンサー

http://neo.s21.xrea.com/web/006.html
http://kumacrow.blog111.fc2.com/blog-entry-490.html

マージンをとって、常にスクロールバーを出すという方法があるようです。
CSS3に対応しているブラウザのみで考えるならめんどくさいことは要りません。

もしくは、そのCSSすら面倒となると、根本的に、1ページの情報量を減らすとか。

Qプログラムの中でpublic void showAAA()をメインメソッドから実行するには???

タイトルの通りなのですがプログラムの中で、public void showAAA()というメソッドをメインメソッドから実行するにはどのように記述すればいいのでしょうか???

Aベストアンサー

こんばんは~!(^o^)丿

やり方として2つありますね!
(1)mainからclassを分け、インスタンスを生成してメソッドを呼ぶならこんな感じです。

class Main
{
public static void main(String[] args)
{
A a = new A();
a.showAAA();
}
}
class A
{
public void showAAA() {
System.out.println("showAAA()");
}
}

(2)classを分けず、インスタンスを生成しない場合はstaticにします。こんな感じです。

class Main
{
public static void main(String[] args)
{
showAAA();
}

public static void showAAA() {
System.out.println("showAAA()");
}
}

わからないことがあったらまたどうぞ!
では~(^^♪

こんばんは~!(^o^)丿

やり方として2つありますね!
(1)mainからclassを分け、インスタンスを生成してメソッドを呼ぶならこんな感じです。

class Main
{
public static void main(String[] args)
{
A a = new A();
a.showAAA();
}
}
class A
{
public void showAAA() {
System.out.println("showAAA()");
}
}

(2)classを分けず、インスタンスを生成しない場合はstaticにします。こんな感じです。

class Main
{
public static void main(String[] args)
{
showAAA();
}

public...続きを読む

QMovable Type でスクロールバーのデザインを変えるには?

宜しくお願いします。

現在、MT3.151を使っていますが、ブログのスクロールバーを変更するやり方がわかりません。HTMLでは動作していたCSSを、StylesheetのCSSのBODY部分にそっくりそのまま移してみましたが、デザインが全く変わりません。ですが、時々スクロールバーが変わっているMTのブログも見かけるので、何か別のやりかたがあるのかなと思い、投稿させていただきました。

お手数ですが、ご回答宜しくお願いいたします。

Aベストアンサー

CSSの記述を

body,html {
scrollbar-face-color: ・・・(略)}

としてしてみてはどうでしょう?

Qアプレットのinitは、なせ"public void init()とかくのでしょうか

java初心者です、宜しくお願いします。
javaのコンストラクターについて質問致します、宜しくお願いします。

アプリケーションのコンストラクターは、"public *****(){}"
となりますが、

アプレットのinitは、"public void init(){}"となるのはどのような理由から
でしょうか。

参考書等を色々検索しましたが、ヒットしませんでした、宜しくお願いします。

Aベストアンサー

通常のクラスでは、初期化処理は new をした時のコンストラクタで行いますが、
画面に表示する部品のようなクラスでは、初期化処理のタイミングが異なります。

init の説明
https://docs.oracle.com/javase/jp/8/docs/api/java/applet/Applet.html#init--

説明を読むと、アプレットはブラウザとかビューアによって new されます。
恐らくその後でセキュリティー的な諸設定を行ない、
端末がスリープ状態とか画面が非表示とかでないタイミングを待ってから、
ようやくユーザーによる初期化処理を認めているのでしょう。

というわけで、コンストラクタで初期化させたくない、なにか特別な事情があるクラスの場合は、
コンストラクタとは別に init とか initialize とか configurate などのメソッドを用意することがあります。

QjQueryのタブにスクロールバーをつけたい

jQueryのタブにスクロールバーをつけたい

jQueryの「ui.tabs.js」を使ってタブを制作し、「jquery.cookie.js」でタブの内容を記憶し。
さらに、そのタブの中身が設定した枠を超えると「jScrollPane.js」を使って横にスクロールバーがでるようにしたいのですがうまくいきません。


<script src="./js/jquery-1.2.6.js" type="text/javascript"></script>
<script src="./js/jquery.cookie.js" type="text/javascript"></script>
<script src="./js/ui.core.js" type="text/javascript"></script>
<script src="./js/ui.tabs.js" type="text/javascript"></script>
<script src="./js/jScrollPane.js" type="text/javascript"></script>
<script src="./js/jquery.mousewheel.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function() {
$('#container1 > ul').tabs({ event: 'click' ,cookie: { expires: 30 } , cache: true});
$('#fra_sl').jScrollPane({scrollbarWidth:13, scrollbarMargin:9});
});
</script>

<body>

<div id="container1">
<ul>
<li id="tab1"><a href="#tab_categry">タブ1</a></li>
<li id="tab2"><a href="#tab_all">タブ2</a></li>
</ul>

<div id="pane1">
<div id="tab_categry">
<p>中身1(省略)</p>
</div>
<div id="tab_all">
<p>中身2(省略)</p>
</div>
</div>
</div>
</body>


以前同じような質問をされていた方がいたのでそちらも参考にして試してみたのですが→http://okwave.jp/qa/q4819862.html
javascriptは初心者なものでよくわかりませんでしたorz

どなたかわかる方がいましたら教えてもらえないでしょうか??

jQueryのタブにスクロールバーをつけたい

jQueryの「ui.tabs.js」を使ってタブを制作し、「jquery.cookie.js」でタブの内容を記憶し。
さらに、そのタブの中身が設定した枠を超えると「jScrollPane.js」を使って横にスクロールバーがでるようにしたいのですがうまくいきません。


<script src="./js/jquery-1.2.6.js" type="text/javascript"></script>
<script src="./js/jquery.cookie.js" type="text/javascript"></script>
<script src="./js/ui.core.js" type="text/javascript"></script>
<script src="./...続きを読む

Aベストアンサー

タブを切り替えた時にスクロールバーの長さがリサイズされないということです。

=>タブの中身に、もう一階層<div>を作ってCSSで、大きさ指定すればうまく
いきました。先に、jScrollPane()を実行します。

※jScrollPaneのサンプルページにUI Tabと併用している例が載ってます。
http://www.kelvinluck.com/assets/jquery/jScrollPane/tabs_example.html

<style type="text/css">
.scroll-pane {width:500px;height:100px;overflow:auto;}
.ui-tabs-hide {position:absolute;left:-10000px;display:block;}
#container1 {width:100%;}
</style>
<script type="text/javascript" charset="utf-8">
<!--
$(document).ready(function(){
$('.scroll-pane').jScrollPane({scrollbarWidth:13, scrollbarMargin:9});
$('#container1').tabs({event:'click',cookie: { expires: 30 },cache:true});
});
// -->
</script>
</head>
<body>
<div id="container1">
<ul>
<li id="tab1"><a href="#tab_categry">タブ1</a></li>
<li id="tab2"><a href="#tab_all">タブ2</a></li>
</ul>
<div id="pane1">
<div id="tab_categry">
<div class="scroll-pane">
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
<p>中身1(省略)中身1(省略)中身1(省略)中身1(省略)中身1</p>
</div>
</div>
<div id="tab_all">
<div class="scroll-pane">
<p>中身2(省略)中身2(省略)中身2(省略)中身2(省略)中身2(省略)</p>
<p>中身2(省略)中身2(省略)中身2(省略)中身2(省略)中身2(省略)</p>
<p>中身2(省略)中身2(省略)中身2(省略)中身2(省略)中身2(省略)</p>
<p>中身2(省略)中身2(省略)中身2(省略)中身2(省略)中身2(省略)</p>
</div>
</div>
</div>
</div>
</body>
</html>

タブを切り替えた時にスクロールバーの長さがリサイズされないということです。

=>タブの中身に、もう一階層<div>を作ってCSSで、大きさ指定すればうまく
いきました。先に、jScrollPane()を実行します。

※jScrollPaneのサンプルページにUI Tabと併用している例が載ってます。
http://www.kelvinluck.com/assets/jquery/jScrollPane/tabs_example.html

<style type="text/css">
.scroll-pane {width:500px;height:100px;overflow:auto;}
.ui-tabs-hide {position:absolute;left:-10000px;display:block;}
#co...続きを読む

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング