我定义了一个按钮和一个文本的方法,作为公共部分,在JPanel里面分别调用了两次按钮和文本的方法!我想做出的效果是:点击“事件一”,输入文本,在“内容一”处显示输入的内容点击“事件二”,输入文本,在“内容二”处显示输入的内容按钮和文本的方法只能定义一次,就是把按钮和文本的方法作为公共部分,提高代码的重用度!我做出来的效果是,点击“事件一”和“事件二”,内容都显示在内容二上!加粗部分的代码怎么改啊?按钮和文本的方法做成公共部分!不重复定义!怎么弄啊?
下面是代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;public class EventDemo extends JFrame {
 //private static final long serialVersionUID = 1L;
 private JPanel jpl = null;
 private JButton jbt = null;
 private JLabel jlb = null;
 public EventDemo(String title){
  super();
  setSize(300,200);
  setTitle(title);
  setContentPane(getJPane());
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 public JPanel getJPane(){
  if(jpl == null){
   jpl = new JPanel();
   jpl.setLayout(null);
   
   jpl.add(getJbt("事件一",20,40,80,30));
   jpl.add(getJlb("内容一",110,40,150,20));
   
   jpl.add(getJbt("事件二",20,80,80,30));
   jpl.add(getJlb("内容二",110,80,150,20));
   
  }
  return jpl;
 }
 
 //按钮
 public JButton getJbt(String txt,int x,int y,int w,int h){
  jbt = new JButton();
  jbt.setText(txt);
  jbt.setBounds(x, y, w, h);
  jbt.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    String input = JOptionPane.showInputDialog(this,"请输入一个字符串");
    if(input!=null){
     jlb.setText(input);
    }
   }
  });
  
  return jbt;
 }
 
 //文本框
 public JLabel getJlb(String text,int x,int y,int w,int h){
  jlb = new JLabel();
  jlb.setText(text);
  jlb.setVerticalAlignment(SwingConstants.TOP);
  jlb.setBounds(x, y, w, h);
  return jlb;
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  EventDemo eve = new EventDemo("事件");
  eve.setVisible(true);
 }}

解决方案 »

  1.   

    给你简单改了一下。
    public class EventDemo extends JFrame {
         //private static final long serialVersionUID = 1L;
         private JPanel jpl = null;
    //     private JButton jbt = null;
    //     private JLabel jlb = null;     private JButton[] jbt = null;
         private JLabel[] jlb = null;     public EventDemo(String title){
          super();
          setSize(300,200);
          setTitle(title);
          setContentPane(getJPane());
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
         public JPanel getJPane(){
          if(jpl == null){
           jpl = new JPanel();
           jpl.setLayout(null);       jbt = getJbt(new String[]{"事件一", "事件二"},new int[]{20, 20}, new int[]{40, 80}, new int[]{80, 80},new int[]{30, 30});
           jlb = getJlb(new String[]{"内容一", "内容二"},new int[]{110, 110}, new int[]{40, 80},new int[]{150, 150},new int[]{20, 20});       System.out.println(jbt.length);
           for (int i = 0; i < jbt.length; i++) {
               jpl.add(jbt[i]);
               jpl.add(jlb[i]);
           }      }
          return jpl;
         }     //按钮
         public JButton[] getJbt(String[] txt,int[] x,int[] y,int[] w,int[] h){         final JButton[] buttons = new JButton[txt.length];         for (int i = 0; i < txt.length; i++) {             buttons[i] = new JButton();
                 buttons[i].setText(txt[i]);
                 buttons[i].setBounds(x[i], y[i], w[i], h[i]);             action(buttons[i], i);
             }      return buttons;
         }     private void action(JButton button, final int index) {         button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    String input = JOptionPane.showInputDialog(this,"请输入一个字符串");
                    if(input!=null){
                        jlb[index].setText(input);
                    }
                }         });
         }     //文本框
         public JLabel[] getJlb(String[] text,int[] x,int[] y,int[] w,int[] h){         final JLabel[] label = new JLabel[text.length];         for (int i = 0; i < label.length; i++) {             label[i] = new JLabel();
                 label[i].setText(text[i]);
                 label[i].setVerticalAlignment(SwingConstants.TOP);
                 label[i].setBounds(x[i], y[i], w[i], h[i]);
             }
          return label;
         }
         public static void main(String[] args) {
          // TODO Auto-generated method stub
          EventDemo eve = new EventDemo("事件");
          eve.setVisible(true);
         }    }