2017-02-20 7 views
0

Jlist経由でデータベースから値を取得しようとしています。しかし、Jlistの値を選択すると値は返されず、タイトルの代わりに "Jtable"が空になります。それが私のUIのコードです。あなたの助けのための おかげで...JListから値を取得することについて

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()); 
} 

}

答えて

0

私は正確に何をしたい理解していないが、私はこの方法でそれを実行するようにコードを変更: enter image description here

もちろん、私あなたのプログラムを動かすためにすべてハードコードされています。カテゴリの名前の代わりに左側に「[email protected]」というオブジェクトのハッシュコードが表示されている場合は、Categoryクラスを変更してtoStringメソッドをオーバーライドする必要があります。

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

問題が解決しない場合は、コメントを追加してください。

+0

は私が少し(!)少し混乱私の問題を共有することを知っている:)ありがとうございました、しかし、あなたの答えは、まさに私があなたの興味のためにそんなに再び:)感謝を検索し、それを聞いてニース –

+0

を助ける何の事でしたあなたのために働く!メキシコシティ以来のご挨拶! – sirandy

関連する問題