swing问题,我是想在tabbedPane中放两个jpanel,这两个Jpanel上有一些文本框,两个jpanel公用确定按钮……
tabbedPane.addChangeListener(newChangeListener(){publicvoidstateChanged(ChangeEvente)...
tabbedPane.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e) {
//System.out.println("df");
jbconfirm.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (panel2.requestFocus(true)) {
String gsname = fname.getText();// 公司名称
System.out.println(gsname);
}
if(panel1.requestFocus(true)){
String dfString=field.getText();
System.out.println(dfString);
}
}
});
}
});
公用按钮倒是可以了,但是每次选择一个jpanel然后再选回来的时候再点击确定输入的内容就增多了,也就是你刚才选择了多少次jpanel就输出几次你填进去的内容,感觉是监听里面写错了求高人回答 展开
public void stateChanged(ChangeEvent e) {
//System.out.println("df");
jbconfirm.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (panel2.requestFocus(true)) {
String gsname = fname.getText();// 公司名称
System.out.println(gsname);
}
if(panel1.requestFocus(true)){
String dfString=field.getText();
System.out.println(dfString);
}
}
});
}
});
公用按钮倒是可以了,但是每次选择一个jpanel然后再选回来的时候再点击确定输入的内容就增多了,也就是你刚才选择了多少次jpanel就输出几次你填进去的内容,感觉是监听里面写错了求高人回答 展开
2个回答
展开全部
你的需求我没太看明白
按你的代码来看 你是每次点击这个按钮的时候就输出一个文本框中的内容 但是你来回切换tab的时候 你每次输出的内容就会增加
这个原因是的changeListener中每次都给jbconfirm创建新的鼠标监听器,导致你每次切换,就会增加一个监听器。这样会导致最后有许多个监听器在监听这一事件,所以会多次输出。
另外,对于JButton,应添加ActionListener而不是MouseListener。
附(我猜是这个意思的代码):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame {
public MainFrame() {
JPanel panel1 = new JPanel();
fname = new JTextField(20);
panel1.add(fname);
JPanel panel2 = new JPanel();
field = new JTextField(20);
panel2.add(field);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("Panel 1", panel1);
tabbedPane.add("Panel 2", panel2);
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
jbconfirm = new JButton("confirm");
jbconfirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (fname.requestFocusInWindow()) {
System.out.println(fname.getText());
}
if (field.requestFocusInWindow()) {
System.out.println(field.getText());
}
}
});
buttonPanel.add(jbconfirm);
this.add(tabbedPane);
this.add(buttonPanel, BorderLayout.SOUTH);
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
private JTextField fname;
private JTextField field;
private JButton jbconfirm;
}
按你的代码来看 你是每次点击这个按钮的时候就输出一个文本框中的内容 但是你来回切换tab的时候 你每次输出的内容就会增加
这个原因是的changeListener中每次都给jbconfirm创建新的鼠标监听器,导致你每次切换,就会增加一个监听器。这样会导致最后有许多个监听器在监听这一事件,所以会多次输出。
另外,对于JButton,应添加ActionListener而不是MouseListener。
附(我猜是这个意思的代码):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame {
public MainFrame() {
JPanel panel1 = new JPanel();
fname = new JTextField(20);
panel1.add(fname);
JPanel panel2 = new JPanel();
field = new JTextField(20);
panel2.add(field);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("Panel 1", panel1);
tabbedPane.add("Panel 2", panel2);
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
jbconfirm = new JButton("confirm");
jbconfirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (fname.requestFocusInWindow()) {
System.out.println(fname.getText());
}
if (field.requestFocusInWindow()) {
System.out.println(field.getText());
}
}
});
buttonPanel.add(jbconfirm);
this.add(tabbedPane);
this.add(buttonPanel, BorderLayout.SOUTH);
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
private JTextField fname;
private JTextField field;
private JButton jbconfirm;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询