当前位置: 首页 > 知识库问答 >
问题:

我想在每次单击按钮时创建组合框

伯晨
2023-03-14

这是我的按钮单击事件。我想在每次单击按钮时创建组合框。

私有void jButton1ActionPerformed(java.awt.event.ActionEvent evt){

 jButton1.addActionListener(new ActionListener(){

     @Override
     public void actionPerformed(ActionEvent evt){

     List<JComboBox> listOfComboBoxes = new ArrayList<JComboBox>();

 for(int i=1;i<4;i++){
            int x = 28;
           int y = 100;
          int a = 145;
          int b = 28;

          listOfComboBoxes.get(i);
         listOfComboBoxes.get(i).addItem("--Select the Teacher--");
         listOfComboBoxes.get(i).setLayout(null);
         listOfComboBoxes.get(i).setLocation(x,y);

           add(listOfComboBoxes.get(i)).setSize(a,b);
       x=x+30;
   a=a+40;

   i++;

  }  
     }

});

共有1个答案

赵禄
2023-03-14

您要处理两个问题:一个是添加组合(比如对JPanel),另一个是列出这些组合。让我们将其分成两部分,首先了解添加机制:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MakeCombos extends JFrame {

    private static final int Number_OF_COMBOS = 4;
    private JButton jButton1;
    List<JComboBox> listOfComboBoxes;
    private JPanel panel;
    int counter = 0;

    MakeCombos(){

        super("Test frame");
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(400,300));
        setLocationRelativeTo(null);
        getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));

        //create a panel
        panel = new JPanel();
        getContentPane().add(panel);

        //add button to it
        jButton1 = new JButton("Click Me");
        //add action listener to the panel
        jButton1.addActionListener((ActionEvent e)-> {
            jButton1ActionPerformed();
        });
        panel.add(jButton1, BorderLayout.CENTER);

        validate();
        pack();
        setVisible(true);

        listOfComboBoxes = makeCombos();
    }

    /**
     *@return
     */
    private List<JComboBox> makeCombos() {

        List combos = new ArrayList<JComboBox>();

        for(int i = 0;  i < Number_OF_COMBOS; i++) {

            JComboBox<String> combo = new JComboBox<>(new String[] {});
            combos.add(combo);
        }
        return combos;
    }

    private void jButton1ActionPerformed() {

        if(counter >= listOfComboBoxes.size()) {
            return;
        }


        listOfComboBoxes.get(counter);
        listOfComboBoxes.get(counter).addItem("--Select the Teacher--");
        getContentPane().add(listOfComboBoxes.get(counter)) ;//.setSize(a,b);

        counter++;

        pack();

    }

    public static void main(String[] args)  {

        new MakeCombos();
    }

}

运行它,如果不清楚,请毫不犹豫地询问
现在让我们更进一步,并进行布局。请参阅评论:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MakeCombos extends JFrame {

    private static final int Number_OF_COMBOS = 4;
    private List<JComboBox<String>> listOfComboBoxes;

    private JPanel combosPanel;

    private int xPosition = 28;
    private int yPosition = 100;
    private int width = 145;
    private int height = 28;
    private     int counter = 0;

    MakeCombos(){

        //make width frame for testing
        super("Test frame");
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(500,400));
        setLocationRelativeTo(null);
        //set layout manager to the frame
        getContentPane().setLayout(new BorderLayout());

        //add panel + button to the frame
        JPanel buttonPanel = new JPanel();
        getContentPane().add(buttonPanel, BorderLayout.NORTH); //add the panel to the frame

        //add button to the button panel
        JButton jButton1 = new JButton("Click Me");
        //add action listener to the button
        jButton1.addActionListener((ActionEvent e)-> {
            jButton1ActionPerformed();
        });
        buttonPanel.add(jButton1, BorderLayout.CENTER);

        //--add width panel for the combos
        combosPanel = new JPanel();
        //set layout manager to null so you can layout each combo
        //consider using a layout manager instead 
        combosPanel.setLayout(null); 
        getContentPane().add(combosPanel, BorderLayout.CENTER); //add the panel to the frame

        validate();
        pack();
        setVisible(true);

        //make the combos and add them to width list
        listOfComboBoxes = makeCombos();
    }

    /**
     *
     */
    private List<JComboBox<String>> makeCombos() {

        List<JComboBox<String>> combos = new ArrayList<JComboBox<String>> ();

        for(int i = 0;  i < Number_OF_COMBOS; i++) {

            JComboBox<String> combo = new JComboBox<>(new String[] {});
            combos.add(combo);
        }
        return combos;
    }

    private void jButton1ActionPerformed() {

        if(counter >= listOfComboBoxes.size()) {
            return;
        }

        //////////////////////////////////////////////////////////////////////////////
        //////////////// note : all this block could be moved to MakeCombos() ////////
        // (adding content and setting bounds could have been done when creating ////
        //the combo

        //add content to the combo
        listOfComboBoxes.get(counter).addItem("--Select the Teacher--");

        //set layout bounds to each combo
        listOfComboBoxes.get(counter).setBounds(xPosition, yPosition, width, height);

        //increment position
        xPosition=xPosition+30;
        yPosition=yPosition+40;

        ////////////////////////////////////////////////////////////////////////////
        /////////////////////// end of move-to-makeCombos() block //////////////////
        ////////////////////////////////////////////////////////////////////////////

        //add the combo to the combos panel
        combosPanel.add(listOfComboBoxes.get(counter)) ;

        //increment position and counter
        counter++;

        repaint();
        pack();

    }

    public static void main(String[] args)  {

        new MakeCombos();
    }
}
 类似资料:
  • 问题内容: 我是Swing的新手。 我要在单击按钮(完成按钮)后更新表格。我认为数据正确,但屏幕无法正常工作。 以下是我程序的说明 选中复选框,然后单击完成按钮 最底层应更改。 没有主 这是我的代码: 问题答案: 而不是这样做… 只需更新现有模型 或简单地 假设您要继续向表中添加新行。如果您要这样做,还可以先清除表,然后再向其中添加新行。 Swing的工作原理是MVC(模型-视图- 控制器 ),该

  • 我需要帮助创建一个div,当你点击一个按钮时,里面有自定义超文本标记语言的div会被创建。 如果这是可能的(很可能是),我正在制作一个邮箱。 谢谢!!!

  • 我有一个图像视图和一个按钮,我想要什么,当我点击按钮我想旋转图像视图10度。请帮帮我。 下面是我使用的代码

  • 我找到了其他相关的问题,但没有一个答案实际上解决了我的问题。这个按钮在IE上很好用,但在Chrome上不行。我尝试移除span元素,将按钮放在任何其他标记之外,但仍然触发了两次。这个temple扩展了一个'base.html'文件,代码位于'main'元素中。 HTML: jQuery:

  • 我有一个简单的javafxgui,上面有一个HBox,它包含几个组合框,最终将充当过滤器。我不知道如何在单击“清除”按钮时将组合框的值重置为空字符串。任何提示都将不胜感激。 更新:这是我的代码,为我工作

  • 我正在尝试网络抓取,我需要模拟对buttoN的点击,我已经尝试过了: 并返回此错误: selenium . common . exceptions . nosuchelementexception:消息:没有这样的元素:找不到元素:{"method":"xpath "," selector ":"//*[@ id = " CTL 00 _ CP h1 _ BtnTipoGobierno "]" }