簡體   English   中英

將值從JList轉移到Java中的另一個類

[英]Transfer value from JList to another class in Java

我想將數據庫的名稱從一類轉移到另一類,但是從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());
        }
}

如圖所示這里 ,使用觀察者模式 MainWindow偵聽NameDataBasePanel以獲取合適的PropertyChangeEvent 另請參閱此使用無模式對話框的相關示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM