我是Java Development的新手。我想问一下,当用户按下一个JButton时,有什么办法可以添加新的JButton吗?
答案 0 :(得分:0)
当然可以。我建议你阅读Action Listeners。您可以将一个按钮的可见性设置为false,然后将其显示为:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
otherButton.setVisible(true);
}
});
希望这有帮助!
答案 1 :(得分:0)
import javax.swing.JButton;
public class NewJFrame1 extends javax.swing.JFrame {
/**
* Creates new form NewJFrame1
*/
public NewJFrame1() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new java.awt.FlowLayout());
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1);
pack();
}
int button = 0;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JButton jButton = new javax.swing.JButton();
jButton.setText("button " + (++button));
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton);
this.revalidate();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
NewJFrame1 frame = new NewJFrame1();
frame.setSize(800, 600);
frame.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
答案 2 :(得分:0)
首先阅读......
这里的诀窍是处理LayoutManager
。某些布局(如BorderLayout
)可以为您提供动态添加新组件的问题。确保您使用的LayoutManager
会在添加新组件时更新(例如FlowLayout
,GridLayout
或GridBagLayout
)
在您将容器添加到容器后,您还需要在已更新的容器上调用revalidate
和repaint
,以便布局和绘制通行证已安排,并且可以根据您的更改更新UI。请记住,Swing是懒惰的,它会等到你告诉它需要更新。