こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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);

}
}

投稿日時 - 2013-05-02 15:28:52

QNo.8069621

すぐに回答ほしいです

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

frame.setVisible(true);した後でコンポーネントを追加しているので描画されていないようです。
ご質問のプログラムでも、ウィンドウサイズを変更するなどで再描画を促すことで、表示されるように
なります。
frame.setVisible(true);を最後に持って来れば表示されるかと思います。

蛇足ですが、このプログラムだとFrame0はただフレームを作成するだけのクラスになってしまっている
のでFrame0クラスをJFrameから継承するとよいと思います。
そして、main()メソッドからFrame0のオブジェクトに対してsetVisible(true)としてあげれば、
任意のタイミングでウィンドウが表示できますし、コンストラクタで配置を終えてから表示をするので
今回のような落とし穴にはまらなくなります。
例)
[main()メソッド内]
Frame0 frame = new Frame0();
frame.setVisible(true);
[フレームのクラス]
class Frame0 extends JFrame{
  //略
}

投稿日時 - 2013-05-02 17:46:24

お礼

GUI作り始めてずっと悩んでた問題が一気に解決しました。ありがとうございました。

投稿日時 - 2013-05-02 18:58:30

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問