出産前後の痔にはご注意!

Jframeの中にボタンを作り、ボタンを押すとJInternalFrameではなくJframeを表示させるようにしたいんですが、なかなかできません。
検索したりしてサンプル探したんですが、
Jframeを表示させ、ラベルを貼ったりしたいんですが
どなたかお願いします!!

public class Browser extends JFrame{
public static void main(String args[]) {
Browser frame = new Browser();
frame.setTitle("");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
//ボタン
private JButton bt = new JButton("~~");
public Browser() {
bt.addActionListener(this);
JToolBar tb = new JToolBar();
tb.setFloatable(false);
getContentPane().add(tb, BorderLayout.NORTH);
JPanel panel2 = new JPanel();
panel2.add(bt);
panel2.setLayout(new FlowLayout(FlowLayout.LEFT));
tb.add(panel2);


//↓この辺りの処理の記述で頭が混乱してきました(泣

public class actionPerformed(ActionEvent e){
if(e.getSource() == bt){
Frame FW = new Frame();
FW.setSize(500,400);
FW.setVisible(true);
}
}
class Frame extends Frame{

public Frame(){ //コンストラクタの定義

}
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

自分の勘違いかもしれませんが、無理みたいですよ。


(調べ方、試し方が悪い、もしくは質問内容の認識違いだったらごめんなさい。)

自分が試したのは
import javax.swing.JFrame;
import java.awt.Label;
public class TestFrame extends JFrame {
Label label;
Label label2;

public TestFrame(){
label = new Label("テスト");
getContentPane().add(label);
JFrame jf = new JFrame("ほげ");
label2 = new Label("中のJFrame");
jf.getContentPane().add(label2);
getContentPane().add(jf);
setSize(500,500);
setVisible(true);
}

public static void main(String[] args) {
TestFrame tf = new TestFrame();
}
}
として実行したところ、
java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.addImpl(Container.java:363)
at java.awt.Container.add(Container.java:255)
at sample.TestFrame.<init>(TestFrame.java:27)
at sample.TestFrame.main(TestFrame.java:33)
となりました。
JavaのAPIを見たところ
ContainerクラスのaddImplメソッドに
--------------------------------------------------
例外:
IllegalArgumentException - index が無効な場合
IllegalArgumentException - コンテナの親をそのコンテナ自体に追加しようとしている場合
IllegalArgumentException - ウィンドウをコンテナに追加しようとしている場合
--------------------------------------------------
とありますので、JFrameはWindowのサブクラスなのでダメです。
    • good
    • 0

質問の意図が良くわからないのですが、JOptionPaneとかじゃだめですかね?



参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

Qフレーム上のコンポーネントの削除について

フレーム上の表示内容を切り替えるために、
それまでフレーム上にあったチョイス(choice)を
remove(choice1)メソッドで削除して、その場所に(その上に)画像(image)を表示したいと思うのですが、
チョイスは消えて表示されなくなるのですが、
チョイスのあったところだけ画像が表示されません。
チョイスの影響を消して、普通に画像を表示するにはどうしたらよいでしょうか。よろしくお願いします。

choice1.setLayout(null);
choice1.setBounds(500,300,100,20);
のように、nullレイアウトにしてあります。

Aベストアンサー

>remove(choice1)メソッドで削除
>チョイスは消えて表示されなくなる
>チョイスのあったところだけ画像が表示されません


「『チョイス』以外にそこにまだ
不要なごみコンポーネントが追加されてるから
(つまり削除してない「何か」があるから)」。

どのコンポーネントになにをどれだけ追加(add)したのか、
自分のソースコードを
再点検しましょう。

QJTableのViewの操作に関して

JTableを利用してグラフィカルなテーブル表を作成したいと思っています。
(例)
NAME AGE TEL ADDRESS
------------------------------------
tanaka 30  X-X-X XXX
yamada 23 Y-Y-Y YYY

この際、以下のようなことは実現可能でしょうか?
また可能な場合、どのようなコーティングになるのでしょうか?

(1)特定の列を非表示にする
 例えば"TEL"カラムを非表示にする(ただし内部で内容を保持)
(2)値すべてを非表示にする
 ただし、"NAME"などの列名(ヘッダー)はそのまま表示する

Aベストアンサー

(1)
表示、非表示を司るプロパティはありません。
かわりにViewクラス(この場合はJTable)から列を削除したり追加したりさせます。

TableColumn column table.getColumn("TEL");
table.removeColumn(column);
table.addColumn(column);

一般には表示状態を記憶する変数を用意し、表示/非表示のリクエストがあるたびに
Viewクラスを再構築させるようにすると思います。
ちなみにこの方法で列を消したり追加しても内部のデータに影響は出ません。

自分だったら列の表示・非表示ができるJTableのサブクラスを作りますね。

(2)
こちらも表示・非表示することはできず、表示させたくない場合は
Modelクラスから全ての行を削除することになるでしょう。
削除すると値の保持はされませんので、元のModelのコピーを作っておく必要があるでしょう。

ざっくり書きましたが、この2つを実装するのはおそらく結構しんどいです。

QJpanelへの描画について(初心者です)

質問1
実行した時に内容が表示されたりされなかったりします、どうしてでしょうか?
いろいろ試してみましたが分かりませんでした。
質問2
JPanelではダブルバッファリング機能が備わっているみたいですが、
という事はこのソースでもそれは行なわれているのでしょうか?

以上2点と質問が多いですがよろしくお願いします。

import java.awt.*;
import javax.swing.*;

public class JFrameTest extends JFrame{
 JPanelTest panel;
 Container ct;
 public static void main(String[] args){
  new JFrameTest();
 }
 public JFrameTest(){
  super("JFrameTest");
  panel = new JPanelTest();
  ct = getContentPane();
  setSize(480,480);
  setResizable(false);
  setVisible(true);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  ct.add(panel);
 }
}

class JPanelTest extends JPanel{
 public JPanelTest(){
  setSize(480,480);
 }
 public void draw(Graphics g){
  g.drawString("Test",240,240);
 }
 public void paintComponent(Graphics g){
  super.paintComponent(g);
  draw(g);
 }
}

質問1
実行した時に内容が表示されたりされなかったりします、どうしてでしょうか?
いろいろ試してみましたが分かりませんでした。
質問2
JPanelではダブルバッファリング機能が備わっているみたいですが、
という事はこのソースでもそれは行なわれているのでしょうか?

以上2点と質問が多いですがよろしくお願いします。

import java.awt.*;
import javax.swing.*;

public class JFrameTest extends JFrame{
 JPanelTest panel;
 Container ct;
 public static void main(String[] arg...続きを読む

Aベストアンサー

こんばんは。
実行した際に表示される/されない原因は、フレームをsetVisible(true);した後に、パネルをセットしているからです。
試しにsetVisible(true);とct.add(panel);の間で、
try {
Thread.sleep(100);
}
catch(Exception e) {}
というコードを入れておくと、より高い確率で表示されないようにできると思います。
きちんと表示させたい場合は、フレームを作り終わった後(JFrameTest()コンストラクタの最後で)setVisible(true);を呼んでみてください。

ダブルバッファリングについても、
public void draw(Graphics g){
g.drawString("Test",240,240);
try {
Thread.sleep(2000);
}
catch(Exception e) {}
g.drawString("Test2",240,270);
}
という内容で確認できると思います。

Q描画処理が実行されない

while(gameflag==true){
(数値設定)   
repaint();
long start = System.currentTimeMillis();
while(System.currentTimeMillis()<start+1000){
}
}

上記のようにwhileループの中で数値などの設定を行い、描画をし、遅延をしているのですが他の処理はちゃんと実行されるのになぜか描画処理だけが行われません。また、whileループ外でも描画を行っていますがその時点ではきちんと描画されます。描画されない原因はどのようなことが考えられるでしょうか?描画はpaintComponent(Graphics g) メソッドで描画しています。

Aベストアンサー

>描画されない原因はどのようなことが考えられるでしょうか?

Swingの描画はダブルバッファを使っている関係上、描画メソッドを呼び出したときではなく、その後、もっとも早く再描画できるタイミングで表示を更新します。このため、while内で描画を行っている場合には、そのwhileを抜け、処理が終了した頃で表示が更新されるため、while中で行っている描画処理は見えません。(途中の描画は見えず、最終的に描画された状態だけが表示される)

この処理は、別スレッドを使って実行していますか? メインスレッドでは、上のような理由で途中の更新は見えませんから、マルチスレッドで実行し、描画ごとに強制的にrepaintするなどしてみてはいかがでしょう。

Qプログラム設計書の書き方

僕は新人SEです。
今、上司の方からあるシステムの基本設計書・システム設計書・プログラム設計書を作り、プログラミングまでしてから単体テスト・結合テストもやるように言われています。(全て1人で)

おそらく経験のある方ならすぐにできてしまうようなシステムで、上司の方も勉強のために全てやらせているようです。

今、基本設計書・システム設計書まではなんとかできて、プログラム設計書の作成に取り掛かりたいのですが、初めての経験で実際のプログラム設計書には何をどのように書いているものなのかも全く見当もつかずにいるので全く何も書けません。

上司さんは今週忙しいようで
「来週見てあげるから自分で調べたりしてやってみて」
と言っています。
ですが、全く何もできずにいるのもイヤなので何かそれらしいものでも書いてみたいのですが…プログラム設計書とは何をどう書いてあるものなのでしょうか?

日本語が書いてあるのかプログラムが書いてあるものなのか…
そういったところからわからないので少しでも何か教えていただきたいです。
宜しくお願いします。

Aベストアンサー

こんにちは。
No.1様のご回答通りなのですが会社によって異なります。
というのを踏まえた上で・・・うちではという回答になりますが

・日付 2009/10/10
・版 初版(その後バージョンアップで改定するため、改定ナンバー必須)
・タイトル 企業情報印刷(ここでは決定済み名称)
・発注仕様書ナンバー(正式にお客さまと契約で決めた発注番号を記載)
・作成者 boo_boo_suu
・使用言語 Visual C++
・使用データベース ORACLE
・使用帳票アプリケーション Crystal Reports
・フロー図(Visioで埋め込み図)
・概要説明 
メインメニューから呼び出され企業情報の印刷条件を入力し、クリスタルレポートの帳票情報から企業情報ファイル(KIGYOU_INFO)ファイルを呼び出し印字します。
・全企業情報が一覧で印字可能である。
・特定一企業(企業コード指定)での印字も可能である。
・一企業が指定された場合は企業情報を画面表示する。

-----------------------------------
で・・・・プログラム仕様書はこのくらい。
命令書ですからコードそのものは打ちません。
これみて作ってもらわないといけないので日本語メインです。

あとはDBの仕様書をみてもらったりしてプログラムのローカルルール、画面サイズ、文字サイズ プロシージャ定義やら定数や変数、フォーム、構造体定義書などプログラム書くときの決まりごとに添ってPGさんに打ってもらっています。
一応、図とかつけてみました。(^-^;;
全体の雰囲気はこんな感じだとご理解いただければ幸いです。
ではでは~。

こんにちは。
No.1様のご回答通りなのですが会社によって異なります。
というのを踏まえた上で・・・うちではという回答になりますが

・日付 2009/10/10
・版 初版(その後バージョンアップで改定するため、改定ナンバー必須)
・タイトル 企業情報印刷(ここでは決定済み名称)
・発注仕様書ナンバー(正式にお客さまと契約で決めた発注番号を記載)
・作成者 boo_boo_suu
・使用言語 Visual C++
・使用データベース ORACLE
・使用帳票アプリケーション Crystal Reports
・フロー図(Visioで...続きを読む

Qボタンクリック後パネルを再描画repaintしたい

ボタンをクリック後にstaticで保持していた値にプラス1して
その値をパネルに再描画したいと思っています。
下記のプログラムだとボタンをクリックすると
(<1<2<3<4)となって画像と数字が増えてしまいます
行いたいのは数字の部分だけが再描画されて
カウントされて<3と表示されるだけになってもらいたい


クラス1つ目

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Sample extends JFrame{
static int value=1;
JPanel work = new JPanel();
public static void main(String[] args) {
Sample frame = new Sample();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 200, 200, 100);
frame.add(frame.createPanel(), BorderLayout.LINE_END);
frame.setVisible(true);
}
public JPanel createPanel() {

ImageIcon icon = new ImageIcon("./img/left.gif");
JLabel label = new JLabel();
Cursor c = new Cursor(Cursor.HAND_CURSOR);
label.setCursor(c);
label.setIcon(icon);
JLabel strLabel = new JLabel();
String str = Integer.toString(value);
strLabel.setText(str);
work.add(label);
work.add(strLabel);
label.addMouseListener(new myListener());
return work;
}
class myListener extends MouseAdapter{
public void mouseClicked(MouseEvent e){
System.out.print(Sample.value++);
createPanel().repaint();
setVisible(true);
}
}
}


クラス2つ目
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MouseAdapter implements MouseListener{
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
}

ボタンをクリック後にstaticで保持していた値にプラス1して
その値をパネルに再描画したいと思っています。
下記のプログラムだとボタンをクリックすると
(<1<2<3<4)となって画像と数字が増えてしまいます
行いたいのは数字の部分だけが再描画されて
カウントされて<3と表示されるだけになってもらいたい


クラス1つ目

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing....続きを読む

Aベストアンサー

>class myListener extends MouseAdapter{
>createPanel().repaint();

createPanelでパネルを新規作成してrepaintしていますから、そういった動作になると思います。
labelをクラス変数として保持して、そこに設定するのが簡単だと思います。


人気Q&Aランキング