1

我想将数据库的名称从一个类转移到另一个类,但是从 JList 提取名称时遇到问题。在没有线程的情况下,在 MenuTest 类中接收数据库名称的最简单方法是什么?

这是我的代码:

import javax.swing.JButton;
import javax.swing.JFrame;

import javax.swing.JPanel;

public class MenuGUI extends JFrame
{
    public MenuGUI()
    {
        setTitle("Aplication");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,600);
        setLayout(null);    
        setVisible(true);       
    }

    public void addPanel(JPanel jPanel, int a, int b, int w, int h)
    {
        jPanel.setBounds(a, b, w, h);
        add(jPanel);
    }

    public void addButton(JButton jButton, int a, int b, int w, int h)
    {
        jButton.setBounds(a,b,w,h);     
        add(jButton);
    }   
}

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class MainWindow
{
    private MenuGUI menuGui;
    private JButton jButtonChooseNameDB;
    public NameDataBasePanel _name; 

    public MainWindow()
    {
        menuGui = new MenuGUI();
        addComponents();
    }

    public void addComponents()
    {
        jButtonChooseNameDB = new JButton("Choose name of database");   
        menuGui.addButton(jButtonChooseNameDB, 50, 10, 200, 30);    
        addListeners();     
    }

    public void addListeners()
    {       
        jButtonChooseNameDB.addActionListener(new ActionListener()
        {               
            @Override
            public void actionPerformed(ActionEvent e)
            {
            _name = new nameDataBasePanel();                    
            }
        });
    }   
}

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class NameDataBasePanel extends JDialog implements ListSelectionListener
{
    private JFrame jFrame;  
    private JList jList;
    private JPanel jPanel;
    private String[] list;
    private String dataBaseName;
    private boolean flag = false;

    public NameDataBasePanel()
    {
        list = new String[2];
        list[0] = "database1";
        list[1] = "database2";

        jFrame = new JFrame();
        jFrame.setSize(300,300);
        jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        jFrame.setVisible(true);
        jFrame.setLayout(null);

        jPanel = new JPanel();
        jPanel.setBounds(10, 10, 200, 200);
        jPanel.setVisible(true);
        jList = new JList(list);
        jList.setLayoutOrientation(JList.HORIZONTAL_WRAP);          

        jList.addListSelectionListener(this);                               
        jPanel.add(jList);
        jFrame.add(jPanel);
    }           

    @Override
    public void valueChanged(ListSelectionEvent e)
    {
        if(e.getValueIsAdjusting())
        {
            dataBaseName = (String) jList.getSelectedValue();   
            flag = true;                
        }   

    }

    public String getDataBaseName()
    {
        return dataBaseName;
    }

    public boolean isFlag()
    {
        return flag;
    }
}


public class MenuTest
{

    public static void main(String[] args)
    {
        MainWindow mainWindow = new MainWindow();   
        System.out.println(mainWindow._name.getDataBaseName());
        }
}
4

1 回答 1

2

如此处所示,使用观察者模式。让MainWindowNameDataBasePanel一个合适的PropertyChangeEvent。另请参见使用无模式对话框的相关示例。

于 2013-08-11T14:04:11.723 回答