簡體   English   中英

關於從JList獲取值

[英]About getting values from JList

我試圖通過Jlist從數據庫中獲取值; 但是,當我選擇Jlist的值時,不會返回任何值,並且“ Jtable”將變為空而不是標題。 那是我的UI代碼。 謝謝你的幫助...

package ui;

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

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import model.Category;
import model.Person;
import service.AddressBookService;

import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JSplitPane;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.border.LineBorder;
import java.awt.Color;
import javax.swing.UIManager;
import javax.swing.AbstractListModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;

public class UserInterfaceMain extends JFrame {

private JPanel contentPane;
private JPanel panel;
private JButton btnNew;
private JSplitPane splitPane;
private JList list;
private JTable table;
private JScrollPane scrollPane;
private List<Category> categories = new ArrayList<>();
private List<Person> personList = new ArrayList<>();

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

/**
 * Create the frame.
 */
public UserInterfaceMain() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 624, 395);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(new BorderLayout(0, 0));

    panel = new JPanel();
    contentPane.add(panel, BorderLayout.NORTH);
    panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

    btnNew = new JButton("NEW");
    panel.add(btnNew);

    splitPane = new JSplitPane();
    contentPane.add(splitPane, BorderLayout.CENTER);

    list = new JList();
    list.addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent arg0) {
            do_list_valueChanged(arg0);
        }
    });
    splitPane.setLeftComponent(list);
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    scrollPane = new JScrollPane();
    contentPane.add(scrollPane, BorderLayout.EAST);

    table = new JTable();
    splitPane.setRightComponent(table);
    scrollPane.setViewportView(table);

    loadCategories();
}

public void loadCategories() {

    categories = new AddressBookService().getAllCategories();
    DefaultListModel<Category> listModel = new DefaultListModel<>();
    for (int i = 0; i < categories.size(); i++) {
        listModel.addElement(categories.get(i));
        //listModel.addElement(categories.get(i).getName());
    }
    list.setModel(listModel);
}

public void loadPersonList() {

    String[] columns = new String[] { "NAME", "LAST NAME", "E-MAIL", "CITY" };
    Object[][] personData = new Object[personList.size()][];

    for (int i = 0; i < personData.length; i++) {
        personData[i] = new Object[] { personList.get(i).getName(), personList.get(i).getLastName(),
                personList.get(i).getEmail(), personList.get(i).getCity() };
    }

    TableModel tableModel = new DefaultTableModel(personData, columns);
    table.setModel(tableModel);
}

protected void do_list_valueChanged(ListSelectionEvent arg0) {
    personList = new AddressBookService().getPersonsForTable(((Category)list.getSelectedValue()).getId());
    loadPersonList();
    System.out.println(personList.size());
}

}

我不確定您到底想要什么,但是我修改了您的代碼以這種方式運行它: 在此處輸入圖片說明

顯然,為了運行您的程序,我已經全部進行了硬編碼。 如果您的問題是對象的哈希碼出現在左側而不是類別的名稱“ com.mypackage.Category@12AAAF”,則必須修改Category類並重寫toString方法。

@Override
public String toString() {
    return getName();
}

如果不是您的問題,請添加描述它的評論。

暫無
暫無

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

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