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

如何使用JComboBox更新Jpanel

羊舌承天
2023-03-14

我是java语言新手,我正在尝试创建一个GUI,它有JComboBox,允许用户选择其中一个选项,并根据所选选项,通过添加更多文本字段来更新面板。目前我面临的一个问题是,如果我选择(选项1),面板不会更新,它应该显示5个文本字段及其标签。

我的问题是:如何更新面板以根据用户从JComboBox中选择的选项添加更多文本字段?

此外,我还面临另一个问题,我无法找到设置JFrame大小的方法

这是我的代码:

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RTSS extends JFrame implements ActionListener {

private JComboBox cb;
JPanel main;
JPanel panel3;
JPanel panel2;
JPanel panel1;
GridBagConstraints gbc;
String[] choices;
JLabel Label1;
JLabel Label2;
JLabel Label3;
JLabel Label4;
JLabel Label5;
JTextField tf1;
JTextField tf2;
JTextField tf3;
JTextField tf4;
JTextField tf5;



public RTSS() {
    Border blackline = BorderFactory.createLineBorder(Color.black);
    EmptyBorder b1 = new EmptyBorder(5, 0, 0, 0);
    main = new JPanel(new FlowLayout(FlowLayout.LEFT));

    panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    panel3.setAlignmentX(1);
    panel3.setPreferredSize(new Dimension(800, 35));
    panel3.setBorder(b1);
    main.add(panel3);

    panel2 = new JPanel();
    panel1 = new JPanel();
    panel1.setPreferredSize(new Dimension(700, 500));
    panel1.setBorder(blackline);
    panel1.setLayout(new GridBagLayout());
    gbc = new GridBagConstraints();
    choices = new String[]{ "","Choice 1", "Choice 2", "Choice 3 "};
    cb = new JComboBox(choices);

    //Main inputs (labels)
    Label1 = new JLabel("Label 1 ");
    Label2 = new JLabel("Label 2 ");
    Label3 = new JLabel("Label 3");
    Label4 = new JLabel("Label 4 ");
    Label5 = new JLabel("Label 5 ");

    //TextFields
    tf1 = new JTextField(10);
    tf2 = new JTextField(10);
    tf3 = new JTextField(10);
    tf4 = new JTextField(10);
    tf5 = new JTextField(10);
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.weightx = 0;
    gbc.weighty = 0;
    gbc.insets = new Insets(10, 3, 5, 0);
    panel3.add(cb);
    panel2.add(panel1);
    gbc.gridx = 0;
    gbc.gridy = 0;
    panel1.add(Label1, gbc);
    gbc.gridx = 0;
    gbc.gridy = 1;
    panel1.add(Label2, gbc);
    gbc.gridx = 0;
    gbc.gridy = 2;
    panel1.add(Label3, gbc);
    gbc.gridx = 1;
    gbc.gridy = 0;
    panel1.add(tf1, gbc);
    gbc.gridx = 1;
    gbc.gridy = 1;
    panel1.add(tf2, gbc);
    gbc.weightx = 0.5;
    gbc.weighty = 0.5;
    gbc.gridx = 1;
    gbc.gridy = 2;
    panel1.add(tf3, gbc);
    main.add(panel2);
    add(main);


}
@Override
public void actionPerformed(ActionEvent e) {
    String Choice = cb.getSelectedItem().toString();
    if ("Choice 1".equals(Choice)) {
        gbc.gridx = 0;
        gbc.gridy = 3;
        panel1.add(Label4, gbc);
        gbc.gridx = 1;
        gbc.gridy = 3;
        panel1.add(tf4, gbc);
        gbc.gridx = 0;
        gbc.gridy = 4;
        panel1.add(Label5, gbc);
        gbc.weightx = 6;
        gbc.weighty = 1;
        gbc.gridx = 1;
        gbc.gridy = 4;
        panel1.add(tf5, gbc);
    }
}

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new RTSS().setVisible(true);
        }
    });
}
}

共有1个答案

葛承教
2023-03-14

在RTSS构造函数的末尾添加以下行:

public RTSS() {
    //your code

    //this lines 
    pack();        
    setLocationRelativeTo(null);
    cb.addActionListener(this);
}

这三条线将是1。设置布局,2。将框架和3放在中间。激活ActionListener。如果现在在组合框中进行选择,代码将在ActionListener中执行。

在组合框中选择更改布局后,再次调用pack()。

@Override
public void actionPerformed(ActionEvent e) {
    String Choice = cb.getSelectedItem().toString();
    if ("Choice 1".equals(Choice)) {
         // your code

        pack();
    }
}
 类似资料:
  • 问题内容: 我的JTable有问题。我的JTable显示数据库的内容。一个数据库表具有名称类别。每个类别都显示在JComboBox中。如果单击类别,则应该更新表内容。 这是我的代码的简短摘要,因此可以更轻松地为我提供帮助。该代码应可运行: (TestClass-主要) (如果需要,则为TestTableModel-AbstractTableModel(您需要它来执行代码!) 使用此短代码,如果更改

  • 我需要创建一个新的JComboBox,但是由于我对三个不同的操作使用相同的JFrame,我需要将JComboBox名称作为参数传递 这是我现在拥有的代码: 如果我打印comboTipo,我可以阅读“Tienda.telasItems”或“Tienda.accesoriosItems”或“Tienda.aviosItems”。我希望在组合框声明中使用此文本,这样就不必创建决策结构 如果需要更多信息,

  • 我在Elasticsearch中索引了一个文档,如下所示: 我尝试通过以下命令更新计数字段: 但是,我收到了以下错误: 我到底做了什么,却不见了?我在http://www.elasticsearch.org/guide/reference/api/update.html跟踪文件,但它不起作用。 此外,我还包括父字段: 但还是没有成功。有人能帮我解决这个错误吗?

  • 问题内容: 我有以下形式的mongodb集合: 让值字典为。我需要更新中的键值。即我想更改为 pymongo中的该怎么办? 代码是这样的: 现在在productData中反映新值。 这是我尝试过的方法,它引入了一个新的键值对,而不是更新 问题答案: 如果要将文档的值设置为任意值,可以使用$ set语法。如果该属性已经存在于文档中,则将更新值;如果不存在,则将创建该值。如果您需要像描述的那样在字典中

  • 问题内容: 我正在尝试结合2个jcombobox。1个组合框用于显示费用类别。第二个组合框正在从文本文件读取文件以显示产品类型。如果我更改第一个组合框,我希望第二个组合框将根据用户在第一个组合框中的选择进行更改。 我是否仍有可能从文本文件加载其他组合框?该子项将不是Arrays,而是与以前相同,因为它位于cboperson代码的底部。 编辑的代码: 问题答案: 例如

  • 问题内容: 我发现有关JTextPanes的主题在互联网上缺少有用的文档/教程。我正在尝试做一个简单的文本处理器,我希望它能够从JComboBox中选择一个字体系列,该字体系列根据用户在其系统上安装的字体进行填充。但是,无论尝试什么,我都无法弄清楚如何使其发挥作用。 我所拥有的是一个基于JTextPane构建的工具栏类。当前,它具有许多样式按钮,可用于设置对齐方式以及粗体,斜体和下划线。 这是我的