我是java swing的新手,我在刷新面板时遇到问题。 你能告诉我为什么点击按钮后,JTextField没有显示在主面板上吗? 在此先感谢:)
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
javax.swing.JTextField t = new javax.swing.JTextField("Hello");
mainPanel.add(t);
mainPanel.validate();
}
答案 0 :(得分:0)
您是否尝试过调用revalidate()而不是验证()?
答案 1 :(得分:0)
您可能忘记设置mainPanel
?
尝试以下方法:
mainPanel.setLayout(new FlowLayout());
mainPanel.add(new JTextField("Hello!"));
mainPanel.validate();
<强>更新强>
上述建议并不够聪明。
如camickr所示,FlowLayout
是JPanel
的默认布局。
我希望以下建议会更有帮助。
示例,对情况进行建模。
import java.awt.EventQueue;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JPanelDefaultLayoutTest extends JFrame {
private JPanel mainPanel;
public JPanelDefaultLayoutTest () {
initComponents();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new JPanelDefaultLayoutTest().setVisible(true);
}
});
}
private void initComponents() {
setTitle("Add hello.");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
mainPanel = new JPanel();
JButton button = new JButton();
button.setText("Button");
button.setToolTipText("Press me.");
button.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
JTextField hello = new JTextField("Hello!");
mainPanel.add(hello);
mainPanel.revalidate();
}
});
setContentPane(mainPanel);
mainPanel.add(button);
// pack();
// If you comment the next line (and uncomment the pack() method above),
// you have to resize the frame manually,
// to see the added hello after the button press.
setSize(200, 75);
}
}
结论:如果面板的大小太小,您必须手动调整大小,以查看添加的JTextField实例。
答案 2 :(得分:0)
这是我疯狂的@ss猜测:你正在使用NetBeans来构建你的GUI,并且应该接受新的JTextField的容器,mainPanel,使用NetBeans的GroupLayout,这是一个很难容纳组件的组件在飞行中添加。如果是这样,让mainPanel使用更加用户友好的布局,或者使用自己的简单布局嵌套容器,以实现复杂的GUI。
您需要了解如何在这里使用这些布局管理器:Laying out Components in a Container
您还希望在此问题和下一个问题中提供足够的信息,以便我们不必继续制作SWAG。