所以我有一个由按钮、文本字段和标签组成的布局。用户应该将输入输入到文本字段中。当他点击按钮时,我希望清除输入并显示一个新的“页面”,其中包含我所做的布局。用户可以在新的“页面”中输入任意多的信息,直到他点击“完成”按钮。简而言之,我想在面板或框架之间切换(我不知道是哪个,可能是面板?)。现在,我正在考虑使用卡片布局来执行此操作,但由于我正在读取用户输入,因此它实际上没有意义,因为卡片布局是基于预定数量的面板以及面板中的内容进行制作的。因为我不知道用户何时“完成”,所以我不知道要使用多少个面板。
无论如何,我只是 GUI 的初学者,所以任何帮助都会很棒!
最佳答案
Now, I was thinking of using card layout to do this but since i'm reading user input it wouldn't really make sense since cardlayout is made based on a predetermined amount of panels and what will be in the panels. Since I won't know when the user is "finished", I won't know how many panels to use.
您可以动态地将组件添加到 CardLayout单击下一个按钮时。如果所有页面都具有相同的结构,您可以为这些页面创建一个类,并在每次按下下一个按钮时添加一个新页面。当按下完成按钮时,对所有这些页面在面板(使用 CardLayout
)组件上进行迭代进行一些操作。看看Container.getComponents()方法。您甚至不需要保留任何类型的数组或列表,因为容器已经这样做了。
示例
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Demo {
private void createAndShowGUI() {
final JPanel cardPanel = new JPanel(new CardLayout());
cardPanel.add(new Page(), "1");
final JButton nextButton = new JButton("Next");
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardPanel.add(new Page(), String.valueOf(cardPanel.getComponentCount() + 1));
CardLayout layout = (CardLayout)cardPanel.getLayout();
layout.next(cardPanel);
}
});
final JButton finishButton = new JButton("Finish");
finishButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nextButton.setEnabled(false);
for(Component comp : cardPanel.getComponents()) {
if(comp instanceof Page) {
Page page = (Page)comp;
page.printData();
}
}
}
});
JPanel buttonsPanel = new JPanel();
buttonsPanel.add(nextButton);
buttonsPanel.add(finishButton);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(cardPanel, BorderLayout.CENTER);
frame.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
class Page extends JPanel {
final private JTextField data;
public Page() {
super();
add(new JLabel("Please add some info:"));
data = new JTextField(20);
add(data);
}
public void printData() {
System.out.println(data.getText());
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
}
关于java - GUI - 如何在保存用户输入的同时在面板或框架之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366378/