【问题标题】:Java Swing GridLayout not looking like I expect it toJava Swing GridLayout 看起来不像我期望的那样
【发布时间】:2020-12-17 22:02:15
【问题描述】:

我有一个 GUI,它是一个 6 行 4 列的网格布局,顺序应该是: 标签 - RadioButton - RadioButton - ComboBox

这对第一行是成功的。然而,之后的每一行都搞砸了。请参考图形用户界面的图像。

请忽略注释代码,因为稍后我将在完成 GUI 布局后设置可见性。谢谢。

  JFrame frame = new JFrame("Zoho DNC List Updater");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(height, width);

        // creating menu bar
        JMenuBar mb = new JMenuBar();
        // mb.setLayout(new FlowLayout());
        JMenu m1 = new JMenu("File");
        JMenu m2 = new JMenu("Help");
        mb.add(m1);
        mb.add(m2);

        JMenuItem contact = new JMenuItem("Contact Us");
        JMenuItem help = new JMenuItem("Help");
        JMenuItem openFile = new JMenuItem("Open File");
        JMenuItem saveFile = new JMenuItem("Save File");
        JMenuItem newWindow = new JMenuItem("New window");

        m2.add(contact);
        m2.add(help);
        m1.add(openFile);
        m1.add(saveFile);
        m1.add(newWindow);

        JPanel panel = new JPanel(); // the panel is not visible in output
        JLabel label = new JLabel("Update Records");
        // JTextField tf = new JTextField(10); // accepts upto 10 characters
        JButton send = new JButton("Update");
        JButton reset = new JButton("Quit");
        panel.add(label); // Components Added using Flow Layout
        // panel.add(tf);
        panel.add(send);
        panel.add(reset);

        JPanel panel2 = new JPanel(new GridLayout(6, 4));

        JRadioButton radio1 = new JRadioButton("Yes");
        JRadioButton radio2 = new JRadioButton("No");
        JLabel custom = new JLabel("Customize Call Report?");
        ButtonGroup btnGrp = new ButtonGroup();
        radio1.setBounds(120, 30, 120, 50);
        radio2.setBounds(120, 30, 120, 50);
        custom.setBounds(120, 30, 120, 50);
        btnGrp.add(radio1);
        btnGrp.add(radio2);

        JComboBox campsList = new JComboBox(camps);
        campsList.setSelectedIndex(5);
        campsList.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent r){
                JComboBox cb = (JComboBox)r.getSource();
                String campName = (String)cb.getSelectedItem();
                
             }
        });
        JComboBox inboundsList = new JComboBox(inbounds);
        inboundsList.setSelectedIndex(5);
        inboundsList.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent r){
                JComboBox cb = (JComboBox)r.getSource();
                String campName = (String)cb.getSelectedItem();
                
             }
        });
        JComboBox statList = new JComboBox(stat);
        statList.setSelectedIndex(5);
        statList.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent r){
                JComboBox cb = (JComboBox)r.getSource();
                String campName = (String)cb.getSelectedItem();
                
             }
        });

    JComboBox groupList = new JComboBox(groups);
    groupList.setSelectedIndex(5);
    groupList.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent r){
            JComboBox cb = (JComboBox)r.getSource();
            String campName = (String)cb.getSelectedItem();
            
         }
    });
    
    JComboBox lisList = new JComboBox(lis);
    lisList.setSelectedIndex(5);
    lisList.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent r){
            JComboBox cb = (JComboBox)r.getSource();
            String campName = (String)cb.getSelectedItem();
            
         }
    });

        ButtonGroup btnGrp1 = new ButtonGroup();
        JRadioButton campaignY = new JRadioButton("Yes");
        JRadioButton campaignN = new JRadioButton("No");
        JLabel campaign = new JLabel("Select all campaigns?");
        campaignY.setBounds(120, 30, 120, 50);
        campaignN.setBounds(120, 30, 120, 50);
        btnGrp1.add(campaignY);
        btnGrp1.add(campaignN);

        ButtonGroup btnGrp2 = new ButtonGroup();
        JRadioButton inboundY = new JRadioButton("Yes");
        JRadioButton inboundN = new JRadioButton("No");
        JLabel inbound = new JLabel("Select all inbound groups?");
        btnGrp2.add(inboundY);
        btnGrp2.add(inboundN);

        ButtonGroup btnGrp3 = new ButtonGroup();
        JRadioButton statusY = new JRadioButton("Yes");
        JRadioButton statusN = new JRadioButton("No");
        JLabel status = new JLabel("Select all call statuses?");
        btnGrp3.add(statusY);
        btnGrp3.add(statusN);
        statusY.setBounds(120, 30, 120, 50);
        statusN.setBounds(120, 30, 120, 50);

        ButtonGroup btnGrp4 = new ButtonGroup();
        JRadioButton userGroupY = new JRadioButton("Yes");
        JRadioButton userGroupN = new JRadioButton("No");
        JLabel userGroup = new JLabel("Select all user groups?");
        btnGrp4.add(userGroupY);
        btnGrp4.add(userGroupN);

        userGroupY.setBounds(120, 30, 120, 50);
        userGroupN.setBounds(120, 30, 120, 50);

        ButtonGroup btnGrp5 = new ButtonGroup();
        JRadioButton listsY = new JRadioButton("Yes");
        JRadioButton listsN = new JRadioButton("No");
        JLabel lists = new JLabel("Select all lists?");
        btnGrp5.add(listsY);
        btnGrp5.add(listsN);

        panel2.add(custom);
        panel2.add(radio1);
        panel2.add(radio2);
        campsList.setVisible(true);
        panel2.add(campsList);

        panel2.add(campaign);
        panel2.add(campaignY);
        panel2.add(campaignN);
        inboundsList.setVisible(true);
        panel2.add(inboundsList);
      //  campaign.setVisible(false);
      //  campaignY.setVisible(false);
      //  campaignN.setVisible(false);

        panel2.add(status);
        panel2.add(statusY);
        panel2.add(statusN);
        panel2.add(statList);
       // status.setVisible(false);
       // statusY.setVisible(false);
       // statusN.setVisible(false);

        panel2.add(inbound);
        panel2.add(inboundY);
        panel2.add(inboundN);
        panel2.add(inboundsList);
      //  inbound.setVisible(false);
     //   inboundN.setVisible(false);
     //   inboundY.setVisible(false);

        panel2.add(userGroup);
        panel2.add(userGroupY);
        panel2.add(userGroupN);
        panel2.add(groupList);
       // userGroup.setVisible(false);
      //  userGroupN.setVisible(false);
      //  userGroupY.setVisible(false);

        panel2.add(lists);
        panel2.add(listsY);
        panel2.add(listsN);
        panel2.add(lisList);
      //  lists.setVisible(false);
     //   listsN.setVisible(false);
     //   listsY.setVisible(false);

【问题讨论】:

    标签: java swing jframe layout-manager grid-layout


    【解决方案1】:

    所以,有两个问题。

    首先,当列和行属性都被指定时,列值被忽略,你可以在JavaDocs中找到

    当行数和列数都已通过构造函数或 setRows 和 setColumns 方法设置为非零值时,指定的列数将被忽略。相反,列数由指定的行数和布局中的组件总数确定。

    所以,就你而言,我将其更改为 JPanel panel2 = new JPanel(new GridLayout(0, 4));

    其次,一个实例组件只能驻留在一个父级中,一次。

        panel2.add(custom);
        panel2.add(radio1);
        panel2.add(radio2);
        panel2.add(campsList);
        
        panel2.add(campaign);
        panel2.add(campaignY);
        panel2.add(campaignN);
        panel2.add(inboundsList);
    
        //...
    
        panel2.add(inbound);
        panel2.add(inboundY);
        panel2.add(inboundN);
        panel2.add(inboundsList);
    

    您添加了两次inboundsList,其效果是先将其从容器中删除,然后将其重新添加到新位置。

    您需要使用相同的数据模型创建 JComoboBox 的新实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多