2

シンプルなGUIで作業していて、テキストフィールドで苦労しています。

ここに画像の説明を入力してください これは私が取り組んでいるものです。右は見た目、左は私がやったものです。住所1、住所2などのラベルを付けることに成功しました。しかし、テキストフィールドを付け始めると、ラベルが消えました。setSize、setLocationを使用してみましたが、何も機能しません。

期待される結果に見られるように、同じことが上部パネルの「PaymenMethod」にも起こっています。テキストフィールドがあるはずです。コードにそれらが含まれていますが、実行時に表示されません。助けてください。

これが私のコードです:

    import javax.swing.*;
    import java.awt.*;
    public class PanelDemo extends javax.swing.JFrame{
    private static final int FRAME_WIDTH = 300;
    private static final int FRAME_HEIGHT = 350;
    private static final int FRAME_X_ORIGIN = 150;
    private static final int FRAME_Y_ORIGIN = 250;
    public static void main(String[] args){
    //Frame
    JFrame contentPane = new javax.swing.JFrame();
    contentPane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentPane.setSize(300,350);
    contentPane.setResizable(false);
    contentPane.setLayout(new BorderLayout());
    //Payment Panel
    JPanel paymentPanel = new javax.swing.JPanel();
    paymentPanel.setLayout(new BorderLayout());
    //paymentPanel.setPreferredSize(new java.awt.Dimension(270, 90));
    paymentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Payment Method", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12)));

    ////Components inside Payment Panel
    ////A) Panels: Radio and Details
    JPanel radioPanel = new JPanel();
    radioPanel.setLayout(new GridLayout(3,1));
    JRadioButton Rbutton1 = new JRadioButton("Credit Card");
    JRadioButton Rbutton2 = new JRadioButton("E-Funds");
    JRadioButton Rbutton3 = new JRadioButton("Check");
    Rbutton3.setSelected(true);
    ButtonGroup Bgroup = new ButtonGroup();
    Bgroup.add(Rbutton1);
    Bgroup.add(Rbutton2);
    Bgroup.add(Rbutton3);
    radioPanel.add(Rbutton1);
    radioPanel.add(Rbutton2);
    radioPanel.add(Rbutton3);

    //I thought of using a panel as a gap, but still didn't work
    /*JPanel gap = new JPanel();
    gap.setLayout(new BorderLayout());
    gap.setPreferredSize(new java.awt.Dimension(10, 90));*/


    JPanel detailsPanel = new JPanel();
    detailsPanel.setLayout(new GridLayout(2,1));
    //detailsPanel
    JLabel Accountnum = new JLabel("Account number:");
    JTextField Account = new JTextField();
    Account.setPreferredSize(new java.awt.Dimension(90, 40));
    detailsPanel.add(Accountnum);
    detailsPanel.add(Account);

    paymentPanel.add(gap, BorderLayout.CENTER);
    paymentPanel.add(detailsPanel);
    paymentPanel.add(radioPanel);
    contentPane.add(paymentPanel, BorderLayout.PAGE_START);

    ////Address Information Panel
    JPanel addressPanel = new JPanel();
    addressPanel.setLayout(new BorderLayout());
    addressPanel.setSize(new java.awt.Dimension(270, 80));
    addressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Adress Information", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12)));
    contentPane.add(addressPanel, BorderLayout.CENTER);

    ////Components inside the Address Information Panel
    ////A) Labels (Address 1, Address 2,...)
    JPanel InfoLabel = new JPanel();
    InfoLabel.setLayout(new GridLayout(5,1));
    JLabel address1 = new JLabel("Address 1:");
    JLabel address2 = new JLabel("Address 2:");
    JLabel city = new JLabel("City:");
    JLabel state = new JLabel("State:");
    JLabel zip = new JLabel("Zip Code:");

    InfoLabel.add(address1);
    InfoLabel.add(address2);
    InfoLabel.add(city);
    InfoLabel.add(state);
    InfoLabel.add(zip);

    ////B)Text Fields
    JPanel infotext = new JPanel();
    infotext.setLayout(new GridLayout(5,1));

    JTextField text1 = new JTextField();
    JTextField text2 = new JTextField();
    JTextField text3 = new JTextField();
    JTextField text4 = new JTextField();
    JTextField text5 = new JTextField();

    addressPanel.add(InfoLabel);
    addressPanel.add(infotext);

    JPanel controlPanel = new JPanel(); 
    controlPanel.setLayout(new FlowLayout());
    JLabel test = new JLabel("test");
    controlPanel.add(test);
    contentPane.add(controlPanel, BorderLayout.PAGE_END);


    contentPane.setVisible(true);
}

}
4

3 に答える 3

4

コードを少し変更して、必要なバージョンを実行できるようにしました。基本的に、私がしたのは、レイアウトマネージャーの使用方法をクリーンアップすることだけでした。このようなユーザーインターフェイスをいくつか実行する必要があると予想される場合は、Swingレイアウトマネージャーのjavadocsを読んで、それらをよりよく理解することができます。

作業バージョンは次のとおりです。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class PanelDemo extends javax.swing.JFrame {
  private static final int FRAME_WIDTH = 300;
  private static final int FRAME_HEIGHT = 350;
  private static final int FRAME_X_ORIGIN = 150;
  private static final int FRAME_Y_ORIGIN = 250;

  public static void main(String[] args) {
    // Frame
    JFrame contentPane = new javax.swing.JFrame();
    contentPane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentPane.setSize(300, 350);
    contentPane.setResizable(false);
    contentPane.setLayout(new BorderLayout());
    // Payment Panel
    JPanel paymentPanel = new javax.swing.JPanel();
    paymentPanel.setLayout(new BorderLayout());
    // paymentPanel.setPreferredSize(new java.awt.Dimension(270, 90));
    paymentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Payment Method",
        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12)));

    // //Components inside Payment Panel
    // //A) Panels: Radio and Details
    JPanel radioPanel = new JPanel();
    radioPanel.setLayout(new GridLayout(3, 1));
    JRadioButton Rbutton1 = new JRadioButton("Credit Card");
    JRadioButton Rbutton2 = new JRadioButton("E-Funds");
    JRadioButton Rbutton3 = new JRadioButton("Check");
    Rbutton3.setSelected(true);
    ButtonGroup Bgroup = new ButtonGroup();
    Bgroup.add(Rbutton1);
    Bgroup.add(Rbutton2);
    Bgroup.add(Rbutton3);
    radioPanel.add(Rbutton1);
    radioPanel.add(Rbutton2);
    radioPanel.add(Rbutton3);

    // I thought of using a panel as a gap, but still didn't work
    /*
     * JPanel gap = new JPanel(); gap.setLayout(new BorderLayout());
     * gap.setPreferredSize(new java.awt.Dimension(10, 90));
     */

    JPanel detailsPanel = new JPanel();
    detailsPanel.setLayout(new GridLayout(2, 2));
    // detailsPanel
    JLabel Accountnum = new JLabel("Account number:");
    JTextField Account = new JTextField();
    Account.setPreferredSize(new java.awt.Dimension(90, 40));
    detailsPanel.add(Accountnum);
    detailsPanel.add(Account);

    // paymentPanel.add(gap, BorderLayout.CENTER);
    paymentPanel.add(radioPanel, BorderLayout.CENTER);
    paymentPanel.add(detailsPanel, BorderLayout.EAST);
    contentPane.add(paymentPanel, BorderLayout.PAGE_START);

    // //Address Information Panel
    JPanel addressPanel = new JPanel();
    addressPanel.setLayout(new BorderLayout());
    addressPanel.setSize(new java.awt.Dimension(270, 80));
    addressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Adress Information",
        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12)));
    contentPane.add(addressPanel, BorderLayout.CENTER);

    // //Components inside the Address Information Panel
    // //A) Labels (Address 1, Address 2,...)
    JPanel InfoLabel = new JPanel();
    InfoLabel.setLayout(new GridLayout(5, 2));
    JLabel address1 = new JLabel("Address 1:");
    JLabel address2 = new JLabel("Address 2:");
    JLabel city = new JLabel("City:");
    JLabel state = new JLabel("State:");
    JLabel zip = new JLabel("Zip Code:");
    JTextField text1 = new JTextField();
    JTextField text2 = new JTextField();
    JTextField text3 = new JTextField();
    JTextField text4 = new JTextField();
    JTextField text5 = new JTextField();

    InfoLabel.add(address1);
    InfoLabel.add(text1);
    InfoLabel.add(address2);
    InfoLabel.add(text2);
    InfoLabel.add(city);
    InfoLabel.add(text3);
    InfoLabel.add(state);
    InfoLabel.add(text4);
    InfoLabel.add(zip);
    InfoLabel.add(text5);

    // //B)Text Fields
    JPanel infotext = new JPanel();
    infotext.setLayout(new GridLayout(5, 1));

    addressPanel.add(InfoLabel, BorderLayout.CENTER);
//    addressPanel.add(infotext);

    JPanel controlPanel = new JPanel();
    controlPanel.setLayout(new FlowLayout());
    JLabel test = new JLabel("test");
    controlPanel.add(test);
    contentPane.add(controlPanel, BorderLayout.PAGE_END);
    contentPane.setVisible(true);
  }
}
于 2012-09-04T12:02:02.920 に答える
2

レイアウトの設定領域を忘れてしまいました。

paymentPanel.add(detailsPanel, BorderLayout.EAST);
paymentPanel.add(radioPanel, BorderLayout.CENTER);

addressPanel.add(InfoLabel,BorderLayout.WEST); 
addressPanel.add(infotext, BorderLayout.CENTER);
于 2012-09-04T12:20:37.137 に答える
0

コードは次のように調整する必要があります。

import javax.swing.*;
import java.awt.*;
public class App extends javax.swing.JFrame {
   private static final int FRAME_WIDTH = 300;
   private static final int FRAME_HEIGHT = 350;
   private static final int FRAME_X_ORIGIN = 150;
   private static final int FRAME_Y_ORIGIN = 250;
   public static void main(String[] args){
   //Frame
      JFrame contentPane = new javax.swing.JFrame();
      contentPane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      contentPane.setSize(300,350);
      contentPane.setResizable(false);
      contentPane.setLayout(new BorderLayout());
   //Payment Panel
      JPanel paymentPanel = new javax.swing.JPanel();
      paymentPanel.setLayout(new GridLayout(1,2));
      paymentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Payment Method", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12)));

      ////Components inside Payment Panel
      ////A) Panels: Radio and Details
      JPanel radioPanel = new JPanel();
      radioPanel.setLayout(new GridLayout(3,1));
      JRadioButton Rbutton1 = new JRadioButton("Credit Card");
      JRadioButton Rbutton2 = new JRadioButton("E-Funds");
      JRadioButton Rbutton3 = new JRadioButton("Check");
      Rbutton3.setSelected(true);
      ButtonGroup Bgroup = new ButtonGroup();
      Bgroup.add(Rbutton1);
      Bgroup.add(Rbutton2);
      Bgroup.add(Rbutton3);
      radioPanel.add(Rbutton1);
      radioPanel.add(Rbutton2);
      radioPanel.add(Rbutton3);

      JPanel detailsPanel = new JPanel();
      detailsPanel.setLayout(new GridLayout(2,1));
//detailsPanel
      JLabel Accountnum = new JLabel("Account number:");
      JTextField Account = new JTextField();
      Account.setPreferredSize(new java.awt.Dimension(90, 40));
      detailsPanel.add(Accountnum);
      detailsPanel.add(Account);

      //paymentPanel.add(gap, BorderLayout.CENTER); // THIS PRODUCES SYNTAX ERROR
      paymentPanel.add(radioPanel);
      paymentPanel.add(detailsPanel);
      contentPane.add(paymentPanel, BorderLayout.PAGE_START);

////Address Information Panel
      JPanel addressPanel = new JPanel();
      addressPanel.setLayout(new GridLayout(1,2));
      addressPanel.setSize(new java.awt.Dimension(270, 80));
      addressPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Adress Information", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 1, 12)));
      contentPane.add(addressPanel, BorderLayout.CENTER);

////Components inside the Address Information Panel
////A) Labels (Address 1, Address 2,...)
      JPanel InfoLabel = new JPanel();
      InfoLabel.setLayout(new GridLayout(5,1));
      JLabel address1 = new JLabel("Address 1:");
      JLabel address2 = new JLabel("Address 2:");
      JLabel city = new JLabel("City:");
      JLabel state = new JLabel("State:");
      JLabel zip = new JLabel("Zip Code:");

      InfoLabel.add(address1);
      InfoLabel.add(address2);
      InfoLabel.add(city);
      InfoLabel.add(state);
      InfoLabel.add(zip);

////B)Text Fields
      JPanel infotext = new JPanel();
      infotext.setLayout(new GridLayout(5,1));

      JTextField text1 = new JTextField();
      JTextField text2 = new JTextField();
      JTextField text3 = new JTextField();
      JTextField text4 = new JTextField();
      JTextField text5 = new JTextField();

      infotext.add(text1);
      infotext.add(text2);
      infotext.add(text3);
      infotext.add(text4);
      infotext.add(text5);

      addressPanel.add(InfoLabel);
      addressPanel.add(infotext);

      JPanel controlPanel = new JPanel(); 
      controlPanel.setLayout(new FlowLayout());
      JLabel test = new JLabel("test");
      controlPanel.add(test);
      contentPane.add(controlPanel, BorderLayout.PAGE_END);


      contentPane.setVisible(true);
   }

}

つまり、

  • paymentPanel.add(gap, BorderLayout.CENTER);構文エラーが発生するため、この行を削除する必要があります
  • 、、、およびパネルを重複しない方法で含めることができるようにするにはpaymentPaneladdressPanelを指定する必要があります。GridLayout(1,2)radioPaneldetailsPanelInfoLabelinfotext
  • 前にを追加radioPanelする必要がありますpaymentPanel detailsPanel
  • infotext実際にパネルにテキストフィールドを追加する必要がありますinfotext.add(text1);

:今ではおそらくこれは必要ないことはわかっていますが、@ Danの回答があまり好きではないので、この回答を書きたかったのBorderLayoutですpaymentpanel。動作するようにコードを十分に変更するのではなく、コード。ともかく。

于 2022-01-19T17:32:35.203 に答える