【发布时间】:2021-05-25 03:19:49
【问题描述】:
我目前正在尝试开发一个志愿者应用程序,管理员可以在其中将志愿者的姓名添加到文本字段中,并在每次管理员输入姓名时将此输入转换为一个新按钮。我是 GUI 开发的新手,那我该怎么做呢?我尝试将输入作为字符串传递给方法,但我不确定如何使用这种设计创建多个按钮。
【问题讨论】:
标签: java swing user-interface jbutton jtextfield
我目前正在尝试开发一个志愿者应用程序,管理员可以在其中将志愿者的姓名添加到文本字段中,并在每次管理员输入姓名时将此输入转换为一个新按钮。我是 GUI 开发的新手,那我该怎么做呢?我尝试将输入作为字符串传递给方法,但我不确定如何使用这种设计创建多个按钮。
【问题讨论】:
标签: java swing user-interface jbutton jtextfield
首先检查您需要什么来快速实施。
// UI elements to type in input and create buttons
private JPanel inputPanel = new JPanel();
private JTextField textField = new JTextField();
private JButton addGenericButtonBtn = new JButton( "ADD NEW BUTTON" );
// UI elements to put your generic buttons into
private JPanel genericButtonsPanel;
private List<JButton> buttonList = new ArrayList<>();
您可能需要布局和按钮样式,例如至少可能需要为按钮设置大小,但我不会在此处发布该特定代码。我选择的布局将您的文本字段和用于创建通用按钮的按钮水平放置,并且通用按钮将垂直堆叠在下面的容器中:
inputPanel.setLayout( new BoxLayout( inputPanel, BoxLayout.X_AXIS ) );
genericButtonsPanel.setLayout( new BoxLayout( genericButtonsPanel, BoxLayout.Y_AXIS ) );
这些面板必须添加到您正在使用的父容器中。假设parentContainer 是JPanel 并且您想将所有这些元素添加到:
parentContainer.inputPanel.add( textField );
parentContainer.inputPanel.add( addGenericButtonBtn );
parentContainer.add( inputPanel );
parentContainer.add( genericButtonsPanel );
ActionListener 添加通用按钮
这种设计方式是让您可以在文本字段中键入内容,然后按“添加新按钮”按钮以创建通用按钮并将它们添加到第二个容器genericButtonsPanel。所以剩下的就是addGenericButtonsBtn 的动作监听器来完成这个:
addGenericButtonBtn.addActionListener( e ->
{
String txt = textField.getText();
JButton genericBtn = new JButton( txt );
buttonList.add( genericBtn ); // this is merely to store the generated buttons for future access
genericButtonsPanel.add( genericBtn );
text.setText( "" ); // optional clear of the text field
// this call is mandatory, otherwise the changes to the hierarchy of UI elements will not be reflected
revalidate();
});
这是一个非常简约的示例,可以满足您描述的要求。这刚刚在我的机器上进行了测试,并按预期工作。还有无数种方法可以解决这个问题,因此您可能会看到一些不同的解决方案。
所提供的解决方案缺少细节,例如setSize、setBackground、setBorder 和其他 UI 属性设置器,因此您必须按照自己需要的方式设置 UI 样式。
【讨论】: