如何在Swing程序(Java)中运行时添加和删除组件(JButons,JTextField等),而不使用NetBeans?我应该使用哪种布局?我希望用户输入用户名和密码,当他点击提交按钮时,应该出现带有新组件的新屏幕(JButtons,JTextField等),我无法在运行时实现转换 .
您希望使用两个不同的面板来实现此结果 . 使用相同的面板并删除所有第一个组件并添加所有第二个组件并不是一个好主意 .
创建一个LoginPanel类,其中列出了用户名和密码字段,标签和提交按钮 . 然后,当按下提交按钮时,在登录验证后,隐藏登录面板并显示一个新面板,其中包含下一个屏幕所需的布局 .
这种方法使得维护两个面板变得更加容易,并且清楚地将它们的布局和功能彼此分开 .
您可以使用以下代码将此新框架置于现有面板上:
public static void centerFrameOverComponent(JFrame frame, JComponent component) { Window parent = SwingUtilities.getWindowAncestor(component); Rectangle frameRect = frame.getBounds(); Rectangle parentRect = parent.getBounds(); int x = (int) (parentRect.getCenterX() - frameRect.getWidth() / 2); int y = (int) (parentRect.getCenterY() - frameRect.getHeight() / 2); frame.setLocation(x, y); }
另一种方法是在您希望隐藏特定组件时调用 setVisible(false) .
setVisible(false)
如果我想添加/删除整个子面板,我使用了以下内容:
panel.remove(subPanel); panel.revalidate(); panel.repaint();
您希望在添加/删除组件时调用最后两种方法 .
一种方法是使用CardLayout . 您的登录按钮处理程序将检查凭据并使用show()显示第二个窗格 .
附录:为安全起见,请考虑使用JPasswordField作为密码;为方便起见,用于定位框架的商标setLocationRelativeTo() .
你可以为exsample MyFrame创建一个新的类,它扩展了JFrame,它预设了你的新窗口,你必须在contentpanel中添加你所有控件的类的构造函数....
通过这种方式,您可以为JFrame添加一个jbutton .
class MyFrame extends JFrame{ private JButton jb= new JButton("hello"); public MyFrame(){ setSize(new Dimension(300,180)); //set the MyFrame size getContentPane().add(jb); //add your Component at ContentPane } }
登录后,您可以这种方式显示您的新框架:
new MyFrame().setVisible(true);
4 回答
您希望使用两个不同的面板来实现此结果 . 使用相同的面板并删除所有第一个组件并添加所有第二个组件并不是一个好主意 .
创建一个LoginPanel类,其中列出了用户名和密码字段,标签和提交按钮 . 然后,当按下提交按钮时,在登录验证后,隐藏登录面板并显示一个新面板,其中包含下一个屏幕所需的布局 .
这种方法使得维护两个面板变得更加容易,并且清楚地将它们的布局和功能彼此分开 .
您可以使用以下代码将此新框架置于现有面板上:
另一种方法是在您希望隐藏特定组件时调用
setVisible(false)
.如果我想添加/删除整个子面板,我使用了以下内容:
您希望在添加/删除组件时调用最后两种方法 .
一种方法是使用CardLayout . 您的登录按钮处理程序将检查凭据并使用show()显示第二个窗格 .
附录:为安全起见,请考虑使用JPasswordField作为密码;为方便起见,用于定位框架的商标setLocationRelativeTo() .
你可以为exsample MyFrame创建一个新的类,它扩展了JFrame,它预设了你的新窗口,你必须在contentpanel中添加你所有控件的类的构造函数....
通过这种方式,您可以为JFrame添加一个jbutton .
登录后,您可以这种方式显示您的新框架: