У меня есть JDialog, который извлекает список записей из базы данных.
Это выглядит так:
https://i.stack.imgur.com/KPC5c.png
Я хочу взять JDialog и превратить его в JIntneralFrame, чтобы он мог находиться внутри панели рабочего стола следующим образом:
https://i.stack.imgur.com/4cBZd.png
JDialog просто содержит JPanel, который содержит все поля и кнопки, поэтому изменение его на JInternalFrame - относительно простая задача (просто добавьте JPanel в JInternalFrame).
Проблема в том, что JInternalFrame не модальный . Мне нужно, чтобы внутренняя рамка была модальной к рамке на втором изображении.
EDIT
Я уже пробовал использовать JOptionPane, и у меня был ограниченный успех
JOptionPane.showInternalDialog(null, panel,
JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,
new Object[] {},
null);
но это не дает мне результаты, которые мне нужны. Кнопки на моей панели не могут закрыть рамку, которую создает JOptionPane. Кнопка «Отмена» должна закрыть рамку, а кнопка «Выбрать» устанавливает значение, а затем закрывает рамку. Можно ли как-нибудь заставить кнопки работать так же для JOptionPane? Я хочу использовать свои собственные кнопки, а не кнопки, которые JOptionPane предоставляет автоматически.
Так как же мне сделать модальное JInternalFrame, как JDialog? Предпочтительно, он будет модальным только для внутренней структуры, которая его вызывает, а не для других.
Если это поможет, вот код для моего JDialog:
public class RecordSelectMenu extends JDialog {
private JPanel contentPane;
private JTextField textField;
private JTable table;
private final String queryType;
private final String conditional;
private Object selectionID;
private int busy;
private JDatabase database;
/**
* Create the dialog.
*/
public RecordSelectMenu(String headerText, String searchKey, String
primaryKey, String query, String condition, JDatabase database) {
this.database = database;
this.queryType = query;
this.conditional = condition;
//Set dialog modal
setModal(true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setBounds(100, 100, 650, 360);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel tableQueryLabel = new JLabel(headerText);
tableQueryLabel.setBounds(10, 11, 269, 14);
tableQueryLabel.setFont(new Font("Yu Gothic UI Semibold", Font.BOLD,
16));
contentPane.add(tableQueryLabel);
JSeparator separator = new JSeparator();
separator.setBounds(0, 36, 634, 21);
contentPane.add(separator);
JButton searchButton = new JButton("Search");
searchButton.setBounds(212, 287, 89, 23);
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
search();
}
});
contentPane.add(searchButton);
textField = new JTextField();
textField.setBounds(80, 288, 122, 20);
textField.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent arg0) {
if(arg0.getKeyCode() == KeyEvent.VK_ENTER) {
search();
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
});
contentPane.add(textField);
textField.setColumns(10);
JLabel searchTermLabel = new JLabel(searchKey);
searchTermLabel.setBounds(10, 294, 89, 14);
contentPane.add(searchTermLabel);
JButton selectButton = new JButton("Select");
selectButton.setBounds(311, 287, 89, 23);
selectButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
select();
dispose();
}
});
contentPane.add(selectButton);
JButton cancelButton = new JButton("Cancel");
cancelButton.setBounds(521, 287, 89, 23);
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
contentPane.add(cancelButton);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 48, 607, 228);
contentPane.add(scrollPane);
table = new JTable();
scrollPane.setViewportView(table);
}
public int isBusy() {
return busy;
}
public Object getSelectionPK() {
return selectionID;
}
private void select() {
selectionID = table.getValueAt(table.getSelectedRow(), 0);
}
private void search() {
try {
Query query = new Query(database, (queryType + " " + conditional + "
'*" + textField.getText() + "*' "));
TableModel tableBuilder = new DefaultTableModel(query.getAll(),
query.getColumnNames());
this.table.setModel( tableBuilder);
repaint();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}