所以我正在使用挥杆来制作类似于井字游戏的东西。我制作了一个GridLayout和9个按钮,现在我想让我的一个jbuttons在点击它时显示jtextfield?我尝试使用MouseListener,但没有设法找到解决方案。有什么建议?
答案 0 :(得分:2)
您可以创建自定义按钮。
一种方法是使用CardLayout
按钮,并为其添加JTextField
和JLabel
。在按钮的ActionListener
中,如果按下该按钮,则显示文本字段并禁用该按钮。在字段中输入文本并按输入后,带有show的标签和按钮将被启用。
import java.awt.CardLayout;
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.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
public class TestButtonTextField {
public TestButtonTextField() {
JFrame frame = new JFrame();
frame.add(new TextFieldButton("Hello"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
protected class TextFieldButton extends JButton {
private static final String FIELD = "field";
private static final String LABEL = "label";
private final CardLayout layout = new CardLayout();
private final JLabel label;
public TextFieldButton(String text) {
super();
setLayout(layout);
label = new JLabel(text);
label.setHorizontalAlignment(SwingConstants.CENTER);
this.add(label, LABEL);
final JTextField field = createField();
this.add(field, FIELD);
this.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
layout.show(TextFieldButton.this, FIELD);
TextFieldButton.this.setEnabled(false);
}
});
}
private JTextField createField() {
final JTextField field = new JTextField(5);
field.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
label.setText(field.getText());
field.setText("");
layout.show(TextFieldButton.this, LABEL);
TextFieldButton.this.setEnabled(true);
}
});
return field;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new TestButtonTextField();
}
});
}
}
答案 1 :(得分:0)
使用addActionListener为该按钮添加合适的侦听器。您可以使用 setVisible(boolean)方法切换组件的可见性。但是,您可能必须在执行此操作后调整窗口大小/重新绘制窗口。
编辑:如果您想要替换整个窗口内容,您可能还想看看Swing的CardLayout:http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html