如何将值JList项从JFrame传递到另一个JFrame(只是值)?

时间:2015-01-14 13:51:15

标签: java swing jframe

我已经用两个班写了一个测试。 第一个JPanel,Gestion:带有jlist +按钮的JFrame(按钮打开Jlist 2,PanelTest) 第二个JPanel,PanelTest:JFrame和我想要在String中恢复,这是JFrame Gestion(JList)中的选择值项

怎么做?

Gestion.java:

package IHM;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.List;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JList;
import javax.swing.JButton;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;

public class Gestion extends JFrame {
    private DocumentListener myListener;
    public String test;
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Gestion frame = new Gestion();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public String getTest() {
        return test;
    }


    /**
     * Create the frame.
     * @throws Exception 
     */
    public Gestion() throws Exception {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        final PanelTest panel2 = new PanelTest();

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);

        String choix[] = {" Pierre", " Paul", " Jacques", " Lou", " Marie"};
        final JList list = new JList(choix);
        panel.add(list);

        list.addListSelectionListener(new ListSelectionListener() {
               public void valueChanged(ListSelectionEvent arg0) {
                    test = (String) list.getSelectedValue();
                    System.out.println(test);
                   // PanelTest.setValue(test);
                }
             });



        JPanel panel_1 = new JPanel();
        contentPane.add(panel_1, BorderLayout.SOUTH);

        JButton btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener()  {
            @Override
            public void actionPerformed(ActionEvent e) {
                new PanelTest().setVisible(true);   
                fermerFenetre();

            }

        });


        panel_1.add(btnNewButton);



    }

    public void fermerFenetre(){
           this.setVisible(false);
          }


}

PanelTest.java

package IHM;

import java.awt.BorderLayout;

public class PanelTest extends JFrame {
    public String tyty;
    private JPanel contentPane;
    private JTextField textField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    PanelTest frame = new PanelTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public PanelTest() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        textField = new JTextField();
        contentPane.add(textField, BorderLayout.WEST);
        textField.setColumns(10);



    }

}

1 个答案:

答案 0 :(得分:1)

建议:

  • 使列表变量成为字段,而不是局部变量,或者使其成为最终局部变量,以便可以访问匿名ActionListener的
  • 在ActionListener中获取所选列表项,然后启动第二个窗口。
  • 通过String参数将该String传递给PanelTest对象。
  • 第二个窗口应该是一个对话框,例如JDialog,而不是JFrame。
  • 另外,您很少想让您的GUI类扩展顶级窗口,例如JFrames或JDialogs,因为这极大地限制了GUI代码的灵活性。

例如,

import java.awt.Component;
import java.awt.Dialog.ModalityType;
import java.awt.Window;
import java.awt.event.ActionEvent;
import javax.swing.*;

@SuppressWarnings("serial")
public class Gestion2 extends JPanel {
   private static final String CHOIX[] = { " Pierre", " Paul", " Jacques",
         " Lou", " Marie" };
   private JList<String> choixList = new JList<>(CHOIX);

   public Gestion2() {
      JPanel listPanel = new JPanel();
      listPanel.add(new JScrollPane(choixList));

      JPanel btnPanel = new JPanel();
      btnPanel.add(new JButton(new ListSelectAction("Select Item and Press")));

      setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
      add(listPanel);
      add(btnPanel);
   }

   private class ListSelectAction extends AbstractAction {
      public ListSelectAction(String name) {
         super(name);
      }

      @Override
      public void actionPerformed(ActionEvent e) {
         String selectedItem = choixList.getSelectedValue();
         if (selectedItem != null) {
            PanelTest2 panelTest2 = new PanelTest2(selectedItem);

            Component component = (Component) e.getSource();
            Window win = SwingUtilities.getWindowAncestor(component);

            // JOptionPane example
            JOptionPane.showMessageDialog(win, panelTest2,
                  "JOptionPane Example", JOptionPane.PLAIN_MESSAGE);

            // or JDialog example
            JDialog dialog = new JDialog(win, "JDialog Example",
                  ModalityType.APPLICATION_MODAL);
            dialog.add(panelTest2);
            dialog.pack();
            dialog.setLocationRelativeTo(win);
            dialog.setVisible(true);
         }
      }
   }

   private static void createAndShowGui() {
      Gestion2 mainPanel = new Gestion2();

      JFrame frame = new JFrame("Gestion2");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

@SuppressWarnings("serial")
class PanelTest2 extends JPanel {

   private String selectedItem;
   private JTextField textField = new JTextField(10);

   public PanelTest2(String selectedItem) {
      this.selectedItem = selectedItem;
      textField.setText(selectedItem);
      add(new JLabel("Selected Item:"));
      add(textField);
   }

   public String getSelectedItem() {
      return selectedItem;
   }
}