-1
자바에서 검색 창을 만들고 싶지만 각 키 릴리스 이벤트 이후에 모든 키 이벤트 이후에 Google 검색 창으로 제안하지만 데이터베이스에서 두 개의 열을 제안으로 표시하기 때문에 표에 제안하고 싶습니다. 콤보 상자와 함께 많은 솔루션이 있지만 제안을 표시하는 팝업으로 테이블 싶어요.검색 창에 드롭 다운 jtable을 만드는 방법은 무엇입니까?
자바에서 검색 창을 만들고 싶지만 각 키 릴리스 이벤트 이후에 모든 키 이벤트 이후에 Google 검색 창으로 제안하지만 데이터베이스에서 두 개의 열을 제안으로 표시하기 때문에 표에 제안하고 싶습니다. 콤보 상자와 함께 많은 솔루션이 있지만 제안을 표시하는 팝업으로 테이블 싶어요.검색 창에 드롭 다운 jtable을 만드는 방법은 무엇입니까?
콤보 상자에는 여러 가지 솔루션이 있지만 제안 사항을 표시하기 위해 테이블을 팝 다운으로 지정해야합니다.
두 개의 데이터 열을 표시하는 콤보 상자입니다. 예를 들어 :
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;
}
}
}
또한 표의 제목을 표시하려고합니다! –
[어쩌면이 예 (http://stackoverflow.com/questions/14974228/java-swing-multi-column-autocomplete-combobox)이 문제는 검색하는 방법을 그 안에 – MadProgrammer
@MadProgrammer입니다 데이터베이스의 데이터를 찾아 테이블에 표시하십시오. –
그 자체로는 여러 번 답변 된 일반적인 문제입니다. 문제는 실제로 두 가지입니다 : 1 - 데이터베이스에서 데이터를 가져옵니다. 2 - JTable에서 데이터를 표현/업데이트하십시오. 두 가지 작업을 개별적으로 수행 할 수 있다면이 두 작업을 모두 수행 할 수 있습니다. – MadProgrammer