java - 从不同的类动态添加文本框和 JSlider

标签 java swing layout-manager jslider

我想在单击按钮时动态添加文本字段,但要获取的值和按钮位于一个类中,而我想要添加与其相邻的文本框和 slider 的面板位于不同的类中。代码是-

public class TipSplitting extends JPanel 

JLabel lblNoOfGuests = new JLabel("No. Of guests");
    lblNoOfGuests.setBounds(10, 26, 95, 14);
    add(lblNoOfGuests);

private JTextField noofguests = new JTextField();
    noofguests.setBounds(179, 23, 86, 20);
    add(noofguests);
    noofguests.setColumns(10);
JButton btnTiptailoring = new JButton("TipTailoring");
    btnTiptailoring.setBounds(117, 286, 89, 23);
    add(btnTiptailoring);

public class TipTailoring extends JPanel {}

在这个类中,我需要根据编号动态创建文本字段。进入。在变量noofguests中以及上一类中按钮的点击。

最佳答案

我真的看不出问题是什么,但这里有一些您所描述的简单演示代码。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestDynamicallyAddedTextFields {

    private void initUI() {
        JFrame frame = new JFrame(TestDynamicallyAddedTextFields.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JPanel textfieldContainerPanel = new JPanel();
        textfieldContainerPanel.setLayout(new GridBagLayout());
        JLabel nrOfGuests = new JLabel("Nr. of guests");
        final JFormattedTextField textfield = new JFormattedTextField();
        textfield.setValue(Integer.valueOf(1));
        textfield.setColumns(10);
        JButton add = new JButton("Add");
        add.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (textfield.getValue() != null) {
                    addTextFieldsToPanel((Integer) textfield.getValue(), textfieldContainerPanel);
                }
            }
        });
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING));
        panel.add(nrOfGuests);
        panel.add(textfield);
        panel.add(add);
        frame.add(panel, BorderLayout.NORTH);
        frame.add(new JScrollPane(textfieldContainerPanel));
        frame.setSize(300, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    protected void addTextFieldsToPanel(Integer value, JPanel textfieldContainerPanel) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.gridheight = 1;
        for (int i = 0; i < value; i++) {
            textfieldContainerPanel.add(new JTextField(20), gbc);
        }
        textfieldContainerPanel.revalidate();
        textfieldContainerPanel.repaint();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestDynamicallyAddedTextFields().initUI();
            }
        });
    }

}

结果:

Result image

关于java - 从不同的类动态添加文本框和 JSlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12776144/

相关文章:

java - 如果空流为空,则出现 NullPointerException

java while循环 try catch ,无法打印到新行

java - 我正在编写一个 Controller 来列出 Spring Boot Web Flux 中的员工 ID 和姓名。但也在列表 Controller 中获取 float 值

Java 8 Swing 更改 jToggleButton 的颜色

Window 上的 Java Swing pack() 未最大化它,如何避免这种情况?

java - Mule - 出站端点消息负载异常为 : byte[] 类型

java - ActionListener - 跟踪是否在 actionPerformed 方法内调用了 actionPerformed?

java - 如何在 Java 开发的 Swing GUI 中显示 python 程序输出的值

java - 哪个 Swing 布局管理器可以获得我想要的布局?

java - 如何使用 GridBagConstraints 正确对齐和定位