62,620
社区成员
发帖
与我相关
我的任务
分享
public class StackUI extends JFrame {
JTextField txtfield = new JTextField("afsd");
ComboBoxModel cbxModel = new DefaultComboBoxModel();
JComboBox cbx = new JComboBox(cbxModel);
static boolean isVisible = false; //======== 1
public StackUI() {
Container contentPane = this.getContentPane();
// txtfield = new JTextField(); //======== 2
cbx.addItem("1");
cbx.addItem("2");
cbx.setPreferredSize(new Dimension(80, 25));
txtfield.setPreferredSize(new Dimension(100, 25));
contentPane.add(cbx);
contentPane.add(txtfield);
txtfield.setVisible(isVisible); //======== 3
initListener();
this.setLayout(new FlowLayout());
setSize(400, 400);
setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void initListener() {
//=============== 4 ===================
cbx.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
isVisible = isVisible ? false : true;
txtfield.setVisible(isVisible);
StackUI.this.validate(); // ======= 重点 ======
}
});
/**
cbx.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
if (!txtfield.isVisible()) {
txtfield.setVisible(true);
}
System.out.println("afsafasdf");
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
}
});*/
cbx.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
txtfield.setVisible(true);
}
public void focusLost(FocusEvent e) {
}
});
txtfield.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == e.VK_ENTER) {
String txt = txtfield.getText();
boolean flag = false;
if (!txt.equals("")) {
for (int i = 0; i < cbxModel.getSize(); i++) {
if (cbxModel.getElementAt(i).equals(txt)) {
flag = true;
cbxModel.setSelectedItem(txt);
break;
}
}
if (!flag) {
cbx.addItem(txt);
cbxModel.setSelectedItem(txt);
}
}
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
});
}
public static void main(String args[]) {
new StackUI();
}
}
import java.awt.BorderLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class DisplayText extends JFrame{
JTextField text = new JTextField();
JButton click = new JButton("Click");
public DisplayText(){
super();
this.setSize(200, 200);
text.setSize(100, 100);
this.add(text);
this.add(click,BorderLayout.SOUTH);
click.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
text.setVisible(!text.isVisible());
}
});
this.setVisible(true);
}
public static void main(String[] args){
new DisplayText();
}
}
主要问题不是setVisualable()的问题 不是显示不了 而是没地方显示
this.setLayout(new FlowLayout());//这句话吧布局设为流布局 流布局管理器默认的中间对齐与你的
//setPreferredSize()大小 和 JFrame大小 有矛盾
//JTextField被挡住了
//如果你点击窗口最大化就会发现出来了
把this.setLayout(new FlowLayout());
改成this.setLayout(new FlowLayout(FlowLayout.LEFT));//设置为左对齐就好le
你注册的监听器也很特别
JComBox一般是注册
addItemLinstener 监听Item改变
addActionListener 监听被点击