java - JRadioButton 未正确显示

标签 java swing layout-manager gridbaglayout jradiobutton

我想创建一个简单的食品订购系统,现在我正在创建订单表单的界面。我使用 GridBagLayout 创建表单布局,我的问题是当我想在同一行分配 3 个单选按钮时,它只显示 1 个按钮......我希望有人可以帮助我......

这是我的java代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;

/**
 *
 * @author user
 */
public class ChickenChopOrderingSystem
{
    JFrame frame;
    JPanel mainPanel, p1, p2, p3, p4;
    JLabel lblTitle, lblName, lblPhoneNum, lblFlavour, lblChickenPart;
    JTextField txtName, txtPhoneNum;
    String flavour[] = {"Black Pepper Sauce", "Hainanese", "Grilled", "Lemon"};
    JComboBox box;
    ButtonGroup bg = new ButtonGroup();
    JRadioButton btnWhole, btnHalf, btnQuarter;
    JButton btnDone, btnExit;

    public ChickenChopOrderingSystem()
    {
        frame = new JFrame("Chicken Chop Ordering System");
        mainPanel = new JPanel();
        mainPanel.setPreferredSize(new Dimension(700,700));
        mainPanel.setBackground(Color.yellow);

        lblName = new JLabel("Customer's Name: ");
            txtName = new JTextField(20);

        lblPhoneNum = new JLabel("Phone Number: ");
            txtPhoneNum = new JTextField(11);

        lblChickenPart = new JLabel("Select Part of Chicken: ");
            btnWhole = new JRadioButton("Whole");
                btnWhole.addItemListener(new OperationListener());
            btnHalf = new JRadioButton("Half");
                btnHalf.addItemListener(new OperationListener());
            btnQuarter = new JRadioButton("Quarter");
                btnQuarter.addItemListener(new OperationListener());
            bg.add(btnWhole);
            bg.add(btnHalf);
            bg.add(btnQuarter);

        lblFlavour = new JLabel("Select a flavour: ");
            box = new JComboBox(flavour);

        btnDone = new JButton("Done");
        btnExit = new JButton("Exit");
            btnExit.addActionListener(new ButtonListener());

        //GridBaglayout
        mainPanel.setLayout(new GridBagLayout()); 
        GridBagConstraints gbc = new GridBagConstraints();

        //Label
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.5;
        gbc.weighty = 0.5;
        mainPanel.add(lblName, gbc);


        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.weightx = 0.5;
        mainPanel.add(lblPhoneNum, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.weightx = 0.5;        
        mainPanel.add(lblChickenPart, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbc.weightx = 0.5;
        mainPanel.add(lblFlavour, gbc);

        //TextField
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridwidth = 3;
        mainPanel.add(txtName, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.gridwidth = 3;
        mainPanel.add(txtPhoneNum, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 2;
        mainPanel.add(btnWhole, gbc);

        gbc.gridx = 2;
        gbc.gridy = 2;
        mainPanel.add(btnHalf, gbc);

        gbc.gridx = 3;
        gbc.gridy = 2;
        mainPanel.add(btnHalf, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 3;
        mainPanel.add(box, gbc);


        //frame setting
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridBagLayout());
        frame.add(mainPanel, new GridBagConstraints());
        frame.setSize(new Dimension(1000, 1000));
        frame.setVisible(true);
    }


    public class OperationListener implements ItemListener
    {
        @Override
        public void itemStateChanged(ItemEvent ie) {
            if (ie.getSource() == btnWhole) 
            {                 
                if (ie.getStateChange() == ItemEvent.SELECTED) 
                {   
                    box.removeAllItems(); 
                    box.addItem(flavour[2]);
                }


            } if (ie.getSource() == btnHalf)
            {                 
                if (ie.getStateChange() == ItemEvent.SELECTED) 
                {   
                    box.removeAllItems(); 
                    box.addItem(flavour[0]);
                    box.addItem(flavour[2]);
                    box.addItem(flavour[3]);
                }

            } if (ie.getSource() == btnQuarter)
            {
                if (ie.getStateChange() == ItemEvent.SELECTED) 
                {   
                    box.removeAllItems(); 
                    box.addItem(flavour[0]);
                    box.addItem(flavour[1]);
                    box.addItem(flavour[3]);              
                }
            }
        }
    }

    public class ButtonListener implements ActionListener
    {
        @Override

        public void actionPerformed(ActionEvent ae) {
            if (ae.getSource() == btnExit)
            {
                int s = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?",              
                    "Exit", JOptionPane.YES_NO_OPTION);      

                if (s == JOptionPane.YES_OPTION) 
                {            
                    System.exit(0);         
                } 
            }
        }

    }

    public static void main(String[] args)
    {
        ChickenChopOrderingSystem run = new ChickenChopOrderingSystem();
    }
}

Click here to view output

最佳答案

对于这样的事情:

enter image description here

使用此代码:

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

public class ChickenChopOrderingSystem {

    JFrame frame;
    JPanel mainPanel, p1, p2, p3, p4;
    JLabel lblTitle, lblName, lblPhoneNum, lblFlavour, lblChickenPart;
    JTextField txtName, txtPhoneNum;
    String flavour[] = {"Black Pepper Sauce", "Hainanese", "Grilled", "Lemon"};
    JComboBox box;
    ButtonGroup bg = new ButtonGroup();
    JRadioButton btnWhole, btnHalf, btnQuarter;
    JButton btnDone, btnExit;

    public ChickenChopOrderingSystem() {
        frame = new JFrame("Chicken Chop Ordering System");
        mainPanel = new JPanel();
        // GUESSWORK! 
        //mainPanel.setPreferredSize(new Dimension(700,700));
        mainPanel.setBackground(Color.yellow);

        lblName = new JLabel("Customer's Name: ");
        txtName = new JTextField(20);

        lblPhoneNum = new JLabel("Phone Number: ");
        txtPhoneNum = new JTextField(11);

        lblChickenPart = new JLabel("Select Part of Chicken: ");
        btnWhole = new JRadioButton("Whole");
        btnHalf = new JRadioButton("Half");
        btnQuarter = new JRadioButton("Quarter");
        bg.add(btnWhole);
        bg.add(btnHalf);
        bg.add(btnQuarter);

        lblFlavour = new JLabel("Select a flavour: ");
        box = new JComboBox(flavour);

        btnDone = new JButton("Done");
        btnExit = new JButton("Exit");

        //GridBaglayout
        mainPanel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        int s = 20;
        gbc.insets = new Insets(s,s,s,s);

        //Label
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.5;
        gbc.weighty = 0.5;
        mainPanel.add(lblName, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.weightx = 0.5;
        mainPanel.add(lblPhoneNum, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.weightx = 0.5;
        mainPanel.add(lblChickenPart, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbc.weightx = 0.5;
        mainPanel.add(lblFlavour, gbc);

        //TextField
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridwidth = 3;
        mainPanel.add(txtName, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.gridwidth = 3;
        mainPanel.add(txtPhoneNum, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.gridwidth = 1;
        gbc.weightx = 1d/6d;
        mainPanel.add(btnWhole, gbc);

        gbc.gridx = 2;
        gbc.gridy = 2;
        mainPanel.add(btnHalf, gbc);

        gbc.gridx = 3;
        gbc.gridy = 2;
        mainPanel.add(btnQuarter, gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 3;
        gbc.gridwidth = 3;
        mainPanel.add(box, gbc);

        //frame setting
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridBagLayout());
        frame.add(mainPanel, new GridBagConstraints());
        // GUESSWORK! 
        //frame.setSize(new Dimension(1000, 1000));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        ChickenChopOrderingSystem run = new ChickenChopOrderingSystem();
    }
}

原来的代码存在很多问题。 (拖网内存..)

  • 最后一个元素的约束未设置回网格宽度 3,从而使布局管理器感到困惑。
  • ItemListener 在删除组件时做了一些奇怪的事情,不要这样做。
  • 面板的首选尺寸和框架的尺寸都是猜测。使用 pack() 计算正确的大小。 (将标准Inserts添加到空白的初始约束中。)

关于java - JRadioButton 未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58127405/

相关文章:

java - Java 中循环的性能

java - 输入无法按指定的 libgdx java 工作

java - 在 JFrame 中编辑多个 JPanel

java - JTable定位

java - 在Java中,默认的JPanel高度和宽度是多少?

java - JTable 不填充使用 GridBagLayout 添加到 JPanel 的 JScrollPane

java - 选项卡的组件未显示

java - 将 Java 应用程序移植到 Go - 有什么建议吗?

java - 为什么这个GridBagLayout没有按计划出现?

java - 插入数据库