JLabelの表示について
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 2,040
質問です。現在SwingでJTextFieldに値を入力し、JLabelに計算結果を代入し表示するコードを書いているのですが、計算結果のJLabelを表示することができません。どなたか、ご存知でしたら教えてください。
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Caa extends JFrame implements ActionListener{
JTextField text01;
JTextField text02;
JLabel label01;
JLabel label02;
JLabel label03;
JPanel p;
JPanel p2;
public static void main(String[] args){
Caa frame=new Caa("test");
frame.setVisible(true);
}
Caa(String title){
setTitle(title);
setBounds(100, 100, 300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p = new JPanel();
p2 = new JPanel();
text01 = new JTextField();
text01.setColumns(2);
text02 = new JTextField();
text02.setColumns(2);
JButton button = new JButton("取得");
button.addActionListener(this);
label01 = new JLabel("+");
label02 = new JLabel("=");
label03 =new JLabel();
p.add(text01);
p.add(label01);
p.add(text02);
p.add(label02);
p2.add(button);
Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.NORTH);
contentPane.add(p2, BorderLayout.CENTER);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自動生成されたメソッド・スタブ
int a = Integer.parseInt(text01.getText());
int b = Integer.parseInt(text02.getText());
int c=a+b;
label03.setText(Integer.toString(c));
p.add(label03);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
原因は質問文のソースを引用すると
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自動生成されたメソッド・スタブ
int a = Integer.parseInt(text01.getText());
int b = Integer.parseInt(text02.getText());
int c=a+b;
label03.setText(Integer.toString(c));
p.add(label03); //←ここの行です。
}
frame.setVisible(true);を行った後にactionPerformedでUIコンポーネントの変更を行ってます。
■解決方法1.
SwingのUIコンポーネントツリーが変更されて再描画対象になったことを伝えるために、p.revalidate();を呼ぶ
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自動生成されたメソッド・スタブ
int a = Integer.parseInt(text01.getText());
int b = Integer.parseInt(text02.getText());
int c=a+b;
label03.setText(Integer.toString(c));
p.add(label03);
p.revalidate();
}
■解決方法2.
actionPerformedからp.add(label03); を削除して、Caaのコンストラクタでp.add(label03); を行う。
Caa(String title) {
// 前のソースコードは省略!
p.add(text01);
p.add(label01);
p.add(text02);
p.add(label02);
p.add(label03);// ←を追加する
p2.add(button);
Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.NORTH);
contentPane.add(p2, BorderLayout.CENTER);
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/05/20 18:12