Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(java.awtとjavax.swingについて。)
閲覧数:1132
掲示板(java.awtとjavax.swingについて。)
名前
匿名
題名 java.awtとjavax.swingについて。
質問内容

質問を評価する
(0ポイント)
Windows7でEclipse pleiades-e4.2-ultimate-jre_20121123を使ってJavaプログラミングをしています。
java.awtのものを利用するときは普通にウィンドウに表示されているのですが、javax.swingのものをを利用した時は一度クリックするなどしないと表示されません。
なぜでしょうか?
また、swingでもawtのように初めから何もしなくても表示させることはできるのでしょうか?
質問日時 2013-01-24 21:47:33
名前
匿名
回答内容

回答を評価する
(0ポイント)
ソースもなしじゃ、何がどうなってるのか全然わからん。
Swingでも当然最初から表示することはできる。
回答日時 2013-01-24 23:33:34
名前
匿名
回答内容

回答を評価する
(0ポイント)
特定のソースというより、私が作ってきたswingを用いたプログラムでは起動してみるとswinを用いている部分は半分あるいはすべて見えませんでした。
そして、その部分をクリックあるいはウィンドウのリサイズをすると見えるようになります。

たとえば以下のような経験があります。
JButtonに設定したアイコン(画像)が表示されていない。
→ マウスを持っていくと表示される。
JTextFieldが見えない。
→ ウィンドウリサイズやButtonをクリックしたことによってJTextFieldの中身を変更する(そういうプログラムを書いた場合)と見えるようになる。
JSPlitPaneにJScrollPane・JTabbedPaneを配置し、そのJScrollPaneにJTextAreaを配置しているが、どれも見えない。
→ JTextAreaの中身をすべて選択することによって初期に入れていたテキストは見えるようになるが、その部分しか表示されない。
→ JSplitPaneの仕切り線をクリックしても変化なし。
→ JTabbedPaneをクリックするとJTabblePaneが表示される。それから仕切り線をクリックすると、すべて表示される。

実行環境はWindows7 32bit/64bit eclipseです。
回答日時 2013-01-27 15:24:03
名前
回答内容

回答を評価する
(0ポイント)
まずプログラムが悪いか環境が悪いか切り分けましょう。例えば
http://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html
ここのサンプルプログラムはうまく表示出来ますか?
これがうまくない場合は Java ランタイムがどこかおかしくなってます。
これは大丈夫って場合はご自身のプログラムと比べてみましょう。
回答日時 2013-01-28 01:39:16
名前
匿名
回答内容

回答を評価する
(0ポイント)
その中のButtonDemo・TableDemo・TextAreaDemoを試してみました。
ButtonDemoを実行したときファイルが見つかりませんと言われてしまいました。
ImageIcon leftButtonIcon = createImageIcon("images/right.gif");
のように書いてあるので、srcフォルダなどと同じ場所にimagesフォルダを作ってそこに同じファイル名の画像を用意しました。
それでも、Couldn't find file: images/right.gifなどと言われてしまいました。
画像の置き方は間違っていないと思うのですが。
それ以外は、どれも初めからきちんと表示されていました。

そこで、それらのソースを私が書いているソースと比較してみました。
すると、Demoのほうでは私が普段書かないような書き方をされていました。
私はまだ授業ではawtのほうしか習っておらず、swingのほうは自分でやりたいことを調べてみて出会ったときに使ったりしています。
swingにはswing用の書き方が存在して、私がawtの時と同様に書いているためにあのようなことが起こるのでしょうか?

問題が起きているソースは長いため、一部省略で作り直してみました。

package testProgram;

import java.awt.GraphicsEnvironment;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.Rectangle;

import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
//ウィンドウサイズの各種情報を取得したい
//長方形を使いたい
//フレーム(Window)を使いたい
public class TestProgram extends JFrame{ //Frameクラスを親クラスに持つHTMLEditorクラスの作成
    TestProgram(){ //コンストラクタ
        super(""); //親クラス(Frame)のコンストラクタ実行
        setTitle("newpage.html - HTMLEditor"); //ウィンドウタイトルをnewpage.html - HTMLEditorに設定
        setSize(600,400); //ウィンドウサイズを600×400に設定
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); //ウィンドウサイズの各種情報を取得
        Rectangle windowsize = env.getMaximumWindowBounds(); //ウィンドウを最大化させた時のサイズを取得
        setLocation((windowsize.width-600)/2,(windowsize.height-400)/2); //ウィンドウの位置が真ん中になるように設定
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE ); //×ボタンが押されたらWdadopterオブジェクトを呼び出す
    }

    public static void main(String args[]){ //メイン関数
        TestProgram editor = new TestProgram(); //HTMLEditorクラスのインスタンスeditorの生成
        MenuBar menuBar = new MenuBar(); //メニューバーの生成
        Menu menuFile = new Menu("ファイル"); //ファイルメニューの作成
        menuBar.add(menuFile); //メニューバーにファイルメニューを追加
        MenuItem menuNew = new MenuItem("新規作成", new MenuShortcut('N')); //ショートカットをCtrl+Nに設定した新規作成メニューアイテムの作成
        menuFile.add(menuNew); //新規作成メニューアイテムをファイルメニューに追加
        MenuItem menuOpen = new MenuItem("開く", new MenuShortcut('O')); //ショートカットをCtrl+Oに設定した開くメニューアイテムの作成
        menuFile.add(menuOpen); //開くメニューアイテムをファイルメニューに追加
        MenuItem menuSave = new MenuItem("上書き保存", new MenuShortcut('S')); //ショートカットをCtrl+Sに設定した上書き保存メニューアイテムの作成
        menuFile.add(menuSave); //上書き保存メニューアイテムをファイルメニューに追加
        MenuItem menuNewSave = new MenuItem("名前を付けて保存", new MenuShortcut('S',true)); //ショートカットをCtrl+Shift+Sに設定した名前を付けて保存メニューアイテムの作成
        menuFile.add(menuNewSave); //名前を付けて保存メニューアイテムをファイルメニューに追加
        MenuItem menuPrint = new MenuItem("印刷", new MenuShortcut('P')); //ショートカットをCtrl+Pに設定した印刷メニューアイテムの作成
        menuFile.add(menuPrint); //印刷メニューアイテムをファイルメニューに追加
        menuFile.addSeparator(); //区切り線をファイルメニューに追加
        MenuItem menuExit = new MenuItem("終了", new MenuShortcut('E')); //ショートカットをCtrl+Eに設定した終了メニューアイテムの作成
        menuFile.add(menuExit); //終了メニューアイテムをファイルメニューに追加
        editor.setMenuBar(menuBar); //editorにメニューバーを追加
        JTabbedPane tab=new JTabbedPane();
        tab.addTab("tab1", new JTable(2,2));
        tab.addTab("tab2", new JTable(2,2));
        tab.addTab("tab3", new JTable(2,2));
        JTextArea text = new JTextArea("This\nis\nTestProgram.");
        JSplitPane splitPane = new JSplitPane();
        splitPane.setDividerSize(3);
        splitPane.setDividerLocation(400);
        splitPane.setLeftComponent(text);
        splitPane.setRightComponent(tab);
        editor.getContentPane().add(splitPane);
        editor.setVisible(true); //見えるようにする
    }
}

すると、きちんとすべて表示されていました。
本物では最後の例のように出てこないのですが。
省略している部分問題が隠れているのでしょうか?
回答日時 2013-01-28 12:28:06

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道