gpt4 book ai didi

java - 将值从 JList 传输到 Java 中的另一个类

转载 作者:行者123 更新时间:2023-11-30 04:16:43 24 4
gpt4 key购买 nike

我想将数据库名称从一个类传输到另一个类,但从 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());
}
}

最佳答案

如图here ,使用observer pattern 。让 MainWindow 监听 NameDataBasePanel 以获取合适的 PropertyChangeEvent。另请参阅相关的 example使用无模式对话框。

关于java - 将值从 JList 传输到 Java 中的另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18170922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com