質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

1回答

1356閲覧

Swingを使ったボタンの配置場所を変更したい

yomikaki

総合スコア22

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2022/04/07 02:04

編集2022/04/09 13:32

前提

Javaの勉強でSwingを使ってボタンの配置場所を変更したいと考えておりますが上手くいかずアドバイスお願いいたします。

実現したいこと

並列に並んでいるボタンの配置場所を上下段に表示させたい。

  1. 現在、左側に表示されているテキストフィールドを最上位に表示したい。
  2. 現在、並列に表示されている「上から2列目に表示させたい」ボタンを上から2列目に表示させたい。

現状
イメージ説明

実現したいレイアウト
イメージ説明

該当のソースコード

borderLayoutDemo.java

1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4 5public class DentakuFrame extends JFrame { 6 private static final long serialVersionUID = 1L; 7 8 JPanel contentPane = new JPanel(); 9 10 BorderLayout borderLayout1 = new BorderLayout(); 11 JTextField result = new JTextField(""); 12 double stackedValue = 0.0; 13 boolean isStacked = false; 14 boolean afterCalc = false; 15 String currentOp = ""; 16 17 //フレームのビルド 18 public DentakuFrame() { 19 contentPane.setLayout(borderLayout1); 20 this.setSize(new Dimension(250, 300)); 21 this.setTitle("レイアウト変更"); 22 this.setContentPane(contentPane); 23 24 contentPane.add(result, BorderLayout.NORTH); 25 26 JPanel keyPanel = new JPanel(); 27 JPanel buttonPanel = new JPanel(); 28 JButton button = new JButton(); 29 keyPanel.setLayout(new GridLayout(4, 4)); 30 buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); 31 contentPane.add(keyPanel, BorderLayout.CENTER); 32 buttonPanel.add(button); 33 getContentPane().add(buttonPanel, BorderLayout.NORTH); 34 35 keyPanel.add(new NumberButton("ボタン"), 0); 36 keyPanel.add(new NumberButton("ボタン"), 1); 37 keyPanel.add(new NumberButton("ボタン"), 2); 38 keyPanel.add(new CalcButton("ボタン"), 3); 39 keyPanel.add(new NumberButton("ボタン"), 4); 40 keyPanel.add(new NumberButton("ボタン"), 5); 41 keyPanel.add(new NumberButton("ボタン"), 6); 42 keyPanel.add(new CalcButton("ボタン"), 7); 43 keyPanel.add(new NumberButton("ボタン"), 8); 44 keyPanel.add(new NumberButton("ボタン"), 9); 45 keyPanel.add(new NumberButton("ボタン"), 10); 46 keyPanel.add(new CalcButton("ボタン"), 11); 47 keyPanel.add(new NumberButton("ボタン"), 12); 48 keyPanel.add(new NumberButton("ボタン"), 13); 49 keyPanel.add(new CalcButton("ボタン"), 14); 50 keyPanel.add(new CalcButton("ボタン"), 15); 51 buttonPanel.add(new CalcButton("上から2列目に表示させたい")); 52 53 contentPane.add(new ClearButton(), BorderLayout.SOUTH); 54 this.setVisible(true); 55 } 56 57 public void appendResult(String c) { 58 if (!afterCalc) result.setText(result.getText() + c); else { 59 result.setText(c); 60 afterCalc = false; 61 } 62 } 63 64 public class NumberButton extends JButton implements ActionListener { 65 private static final long serialVersionUID = 1L; 66 67 public NumberButton(String keyTop) { 68 super(keyTop); 69 this.addActionListener(this); 70 } 71 72 public void actionPerformed(ActionEvent evt) { 73 String keyNumber = this.getText(); 74 appendResult(keyNumber); 75 } 76 } 77 78 public class CalcButton extends JButton implements ActionListener { 79 private static final long serialVersionUID = 1L; 80 81 public CalcButton(String op) { 82 super(op); 83 this.addActionListener(this); 84 } 85 86 public void actionPerformed(ActionEvent e) { 87 if (isStacked) { 88 double resultValue = (Double.valueOf(result.getText())).doubleValue(); 89 if (currentOp.equals("+")) stackedValue += resultValue; else if ( 90 currentOp.equals("-") 91 ) stackedValue -= resultValue; else if ( 92 currentOp.equals("×") 93 ) stackedValue *= resultValue; else if ( 94 currentOp.equals("÷") 95 ) stackedValue /= resultValue; 96 result.setText(String.valueOf(stackedValue)); 97 } 98 currentOp = this.getText(); 99 stackedValue = (Double.valueOf(result.getText())).doubleValue(); 100 afterCalc = true; 101 if (currentOp.equals("=")) isStacked = false; else isStacked = true; 102 } 103 } 104 105 public class ClearButton extends JButton implements ActionListener { 106 private static final long serialVersionUID = 1L; 107 108 public ClearButton() { 109 super("C"); 110 this.addActionListener(this); 111 } 112 113 public void actionPerformed(ActionEvent evt) { 114 stackedValue = 0.0; 115 afterCalc = false; 116 isStacked = false; 117 result.setText(""); 118 } 119 } 120}

Starter.java

1 2public class Starter { 3 public static void main( String[] args ) { 4 new borderLayoutDemo(); 5 } 6}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/04/07 03:53

ちょっと言葉ではイメージが分かり難いですので、手書きでもキャプチャして切り貼りでも良いですので、画像で示して頂けませんでしょうか。
yomikaki

2022/04/07 05:07

ご指摘いただいた通りイメージが分かり難かったので、画像追加させていただきました。
jimbe

2022/04/07 05:55

ありがとうございます。
guest

回答1

0

ベストアンサー

ウインドウの大きさを変えた時にどう変化させるかや、処理単位としてプログラムをどう分割するかによってやり方は幾つかあると思いますが、 result と同じエリア(BorderLayout.NORTH) に入れるとすれば、縦の Box を使って

java

1 Box resultPanel = Box.createVerticalBox(); 2 resultPanel.add(result); 3 resultPanel.add(new JButton("2行目")); 4 resultPanel.add(new JButton("3行目")); 5 contentPane.add(resultPanel, BorderLayout.NORTH);

で result の下に縦に並ぶ形になると思います。

投稿2022/04/07 06:12

jimbe

総合スコア12543

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yomikaki

2022/04/09 04:32

お礼が遅くなり申し訳ございません。 また迅速な対応ありがとうございました! 教えていただいたソースコードを追加した所、実現したいレイアウトが完成できました。 >result と同じエリア(BorderLayout.NORTH) に入れるとすれば、縦の Box を使って result の下に縦に並ぶ形にできるのですね!! 解説ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問