62,635
社区成员




// frame 里有一个jtextfield 和一个button ,当点击按钮后,实现把编辑框里的内容变为窗口标题
// 问题是在响应方法里如何获取frame这个对象。
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
}
});
Action sendMessege = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
displayArea.append(editArea.getText()+"\n");
editArea.setText("");
editArea.requestFocus();
}
};
sendButton.addActionListener(sendMessege);
sendButton.registerKeyboardAction(sendMessege,
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), JComponent.WHEN_IN_FOCUSED_WINDOW);
/*这是另一种方法。也没成功
InputMap inputMap = sendButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke((char)(KeyEvent.VK_ENTER)), "send");
sendButton.getActionMap().put("send", sendMessege);
sendButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
}
});
*/
[/quote]按钮有焦点才行。
看看 JRootPane的setDefaultButton方法Action sendMessege = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
displayArea.append(editArea.getText()+"\n");
editArea.setText("");
editArea.requestFocus();
}
};
sendButton.addActionListener(sendMessege);
sendButton.registerKeyboardAction(sendMessege,
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), JComponent.WHEN_IN_FOCUSED_WINDOW);
/*这是另一种方法。也没成功
InputMap inputMap = sendButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke((char)(KeyEvent.VK_ENTER)), "send");
sendButton.getActionMap().put("send", sendMessege);
sendButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
}
});
*/
final JFrame frame = new JFrame("...");
final JTextField input = new JTextField();
final JButton click = new JButton("Update Title");
... // add component to frame
click.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e){
frame.setTitle(input.getText());
}
});
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Demo7 {
private JFrame jf=new JFrame("test");
private JButton jb=new JButton("按下");
public void init()
{
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jf.setTitle("gg");//jf和jb同属于某个类的成员变量,则直接使用其名字jf即可
}
});
jf.add(jb);
jf.pack();
jf.setVisible(true);
}
public static void main(String[] args) {
new Demo7().init();
}
}
2、frame变量同属于某个方法的局部变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Demo6 {
public static void main(String[] args) {
final JFrame jf=new JFrame("test");
JButton jb=new JButton("按下");
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jf.setTitle("gg");//jf和jb是同属于某个方法的局部变量,则须将jf声明为final,然后直接使用其名字jf即可
}
});
jf.add(jb);
jf.pack();
jf.setVisible(true);
}
}
3、button属于frame的成员变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Demo5 {
public static void main(String[] args) {
JFrame jf=new MyJFrame("test");
jf.pack();
jf.setVisible(true);
}
}
class MyJFrame extends JFrame
{
private JButton jb=new JButton("按下");
public MyJFrame(String str)
{
super(str);
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
MyJFrame.this.setTitle("gg"); //jb属于MyFrame类的成员变量,则通过MyJFrame.this方式引用MyFrame类的当前实例
}
});
this.add(jb);
}
}