Создание модального JInternalFrame - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...