2017-02-25 1 views
-1

자바에서 검색 창을 만들고 싶지만 각 키 릴리스 이벤트 이후에 모든 키 이벤트 이후에 Google 검색 창으로 제안하지만 데이터베이스에서 두 개의 열을 제안으로 표시하기 때문에 표에 제안하고 싶습니다. 콤보 상자와 함께 많은 솔루션이 있지만 제안을 표시하는 팝업으로 테이블 싶어요.검색 창에 드롭 다운 jtable을 만드는 방법은 무엇입니까?

+0

[어쩌면이 예 (http://stackoverflow.com/questions/14974228/java-swing-multi-column-autocomplete-combobox)이 문제는 검색하는 방법을 그 안에 – MadProgrammer

+0

@MadProgrammer입니다 데이터베이스의 데이터를 찾아 테이블에 표시하십시오. –

+0

그 자체로는 여러 번 답변 된 일반적인 문제입니다. 문제는 실제로 두 가지입니다 : 1 - 데이터베이스에서 데이터를 가져옵니다. 2 - JTable에서 데이터를 표현/업데이트하십시오. 두 가지 작업을 개별적으로 수행 할 수 있다면이 두 작업을 모두 수행 할 수 있습니다. – MadProgrammer

답변

1

콤보 상자에는 여러 가지 솔루션이 있지만 제안 사항을 표시하기 위해 테이블을 팝 다운으로 지정해야합니다.

두 개의 데이터 열을 표시하는 콤보 상자입니다. 예를 들어 :

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.text.*; 

public class ComboBoxMultiColumn extends JFrame 
{ 
    public ComboBoxMultiColumn() 
    { 
     getContentPane().setLayout(new GridLayout(0, 2)); 

     Vector items = new Vector(); 
     items.addElement(new Item("123456789", "Car")); 
     items.addElement(new Item("23", "Plane")); 
     items.addElement(new Item("345", "Train")); 
     items.addElement(new Item("4567", "Nuclear Submarine")); 

     // Use a JTextArea as a renderer 

     JComboBox comboBox1 = new JComboBox(items); 
     comboBox1.setRenderer(new TextAreaRenderer(5)); 

     getContentPane().add(new JLabel("TextArea Renderer")); 
     getContentPane().add(comboBox1); 

     // Use a JTextPane as a renderer 

     JComboBox comboBox2 = new JComboBox(items); 
     comboBox2.setRenderer(new TextPaneRenderer(10)); 

     getContentPane().add(new JLabel("TextPane Renderer")); 
     getContentPane().add(comboBox2); 

     // Use a JPanel as a renderer 

     JComboBox comboBox3 = new JComboBox(items); 
     comboBox3.setRenderer(new PanelRenderer(50)); 

     getContentPane().add(new JLabel("Panel Renderer")); 
     getContentPane().add(comboBox3); 

     // Using HTML 

     JComboBox comboBox4 = new JComboBox(items); 
     comboBox4.setRenderer(new HTMLRenderer()); 

     getContentPane().add(new JLabel("HTML Renderer")); 
     getContentPane().add(comboBox4); 
    } 

    class Item 
    { 
     private String id; 
     private String description; 

     public Item(String id, String description) 
     { 
      this.id = id; 
      this.description = description; 
     } 

     public String getId() 
     { 
      return id; 
     } 

     public String getDescription() 
     { 
      return description; 
     } 

     public String toString() 
     { 
      return description; 
     } 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new ComboBoxMultiColumn(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    /* 
    ** Tabs are easier to use in a JTextArea, but not very flexible 
    */ 
    class TextAreaRenderer extends JTextArea implements ListCellRenderer 
    { 
     public TextAreaRenderer(int tabSize) 
     { 
      setTabSize(tabSize); 
     } 

     public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) 
     { 
      Item item = (Item)value; 
      setText(item.getId() + "\t" + item.getDescription()); 
      setBackground(isSelected ? list.getSelectionBackground() : null); 
      setForeground(isSelected ? list.getSelectionForeground() : null); 
      return this; 
     } 
    } 

    /* 
    ** Tabs are harder to use in a JTextPane, but much more flexible 
    */ 
    class TextPaneRenderer extends JTextPane implements ListCellRenderer 
    { 
     public TextPaneRenderer(int tabColumn) 
     { 
      setMargin(new Insets(0, 0, 0, 0)); 

      FontMetrics fm = getFontMetrics(getFont()); 
      int width = fm.charWidth('w') * tabColumn; 

      TabStop[] tabs = new TabStop[1]; 
      tabs[0] = new TabStop(width, TabStop.ALIGN_LEFT, TabStop.LEAD_NONE); 
      TabSet tabSet = new TabSet(tabs); 

      SimpleAttributeSet attributes = new SimpleAttributeSet(); 
      StyleConstants.setTabSet(attributes, tabSet); 
      getStyledDocument().setParagraphAttributes(0, 0, attributes, false); 
     } 

     public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) 
     { 
      Item item = (Item)value; 

      if (index == -1) 
       setText(item.getDescription()); 
      else 
       setText(item.getId() + "\t" + item.getDescription()); 

      setBackground(isSelected ? list.getSelectionBackground() : null); 
      setForeground(isSelected ? list.getSelectionForeground() : null); 
      return this; 
     } 
    } 

    /* 
    ** Use a panel to hold multiple components 
    */ 
    class PanelRenderer implements ListCellRenderer 
    { 
     private JPanel renderer; 
     private JLabel first; 
     private JLabel second; 

     public PanelRenderer(int firstColumnWidth) 
     { 
      renderer = new JPanel(); 
      renderer.setLayout(new BoxLayout(renderer, BoxLayout.X_AXIS)); 

      first = new JLabel(" "); 
      Dimension d = first.getPreferredSize(); 
      d.width = firstColumnWidth; 
      first.setMaximumSize(d); 
      second = new JLabel(); 
      renderer.add(first); 
      renderer.add(second); 
     } 

     public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) 
     { 
      Item item = (Item)value; 

      first.setText(item.getId()); 
      second.setText(item.getDescription()); 

      renderer.setBackground(isSelected ? list.getSelectionBackground() : null); 
      renderer.setForeground(isSelected ? list.getSelectionForeground() : null); 

      return renderer; 
     } 
    } 

    /* 
    ** Use HTML to format the text 
    */ 
    class HTMLRenderer extends DefaultListCellRenderer 
    { 
     private static final String START = "<html><table><tr><td width=40>"; 
     private static final String MIDDLE = "</td><td width=120>"; 
     private static final String END = "</td></tr></table></html>"; 

     public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) 
     { 
      super.getListCellRendererComponent(
       list, value, index, isSelected, cellHasFocus); 

      Item item = (Item)value; 
      setText(START 
       + item.getId() 
       + MIDDLE 
       + item.getDescription() 
       + END); 

      return this; 
     } 
    } 

} 
+0

또한 표의 제목을 표시하려고합니다! –

관련 문제