Создание диалогов Java - PullRequest
3 голосов
/ 27 мая 2010

Какой самый простой способ создания диалога:

  • в одном окне я даю данные для адресации конвертов, также задаю тип шрифта из списка размеров
  • при нажатии ОК, в том же или в следующем окне я получаю предварительный просмотр того, как будет выглядеть конверт с заданными именами, и использовал выбранный размер шрифта

Это должно выглядеть примерно так:

альтернативный текст http://img15.imageshack.us/img15/7355/lab10aa.gif

Должен ли я использовать Jdialog? Или будет достаточно JOptionPane? Следующим шагом будет выбор цвета шрифта и фона, поэтому я должен помнить об этом.

Ответы [ 5 ]

2 голосов
/ 27 мая 2010

Это должно помочь вам.

class TestDialog extends JDialog {

    private JButton okButton = new JButton(new AbstractAction("ok") {
        public void actionPerformed(ActionEvent e) {
            System.err.println("User clicked ok");
            // SHOW THE PREVIEW...
            setVisible(false);
        }
    });
    private JButton cancelButton = new JButton(new AbstractAction("cancel") {
        public void actionPerformed(ActionEvent e) {
            System.err.println("User clicked cancel");
            setVisible(false);
        }
    });

    private JTextField nameField = new JTextField(20);
    private JTextField surnameField = new JTextField();
    private JTextField addr1Field = new JTextField();
    private JTextField addr2Field = new JTextField();
    private JComboBox sizes = new JComboBox(new String[] { "small", "large" });

    public TestDialog(JFrame frame, boolean modal, String myMessage) {
        super(frame, "Envelope addressing", modal);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        getContentPane().add(mainPanel);

        JPanel addrPanel = new JPanel(new GridLayout(0, 1));
        addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver"));
        addrPanel.add(new JLabel("Name"));
        addrPanel.add(nameField);
        addrPanel.add(new JLabel("Surname"));
        addrPanel.add(surnameField);
        addrPanel.add(new JLabel("Address 1"));
        addrPanel.add(addr1Field);
        addrPanel.add(new JLabel("Address 2"));
        addrPanel.add(addr2Field);
        mainPanel.add(addrPanel);

        mainPanel.add(new JLabel(" "));

        mainPanel.add(sizes);
        JPanel buttons = new JPanel(new FlowLayout());
        buttons.add(okButton);
        buttons.add(cancelButton);

        mainPanel.add(buttons);

        pack();
        setLocationRelativeTo(frame);
        setVisible(true);
    }


    public String getAddr1() {
        return addr1Field.getText();
    }

    // ...
}

Результат:

enter image description here

0 голосов
/ 28 мая 2010

Если вам нужно использовать JOptionPane:

import java.awt.*;
import javax.swing.*;

public class Main extends JFrame {

    private static JTextField nameField = new JTextField(20);
    private static JTextField surnameField = new JTextField();
    private static JTextField addr1Field = new JTextField();
    private static JTextField addr2Field = new JTextField();
    private static JComboBox sizes = new JComboBox(new String[] { "small", "medium", "large", "extra-large" });

    public Main(){
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        getContentPane().add(mainPanel);

        JPanel addrPanel = new JPanel(new GridLayout(0, 1));
        addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver"));
        addrPanel.add(new JLabel("Name"));
        addrPanel.add(nameField);
        addrPanel.add(new JLabel("Surname"));
        addrPanel.add(surnameField);
        addrPanel.add(new JLabel("Address 1"));
        addrPanel.add(addr1Field);
        addrPanel.add(new JLabel("Address 2"));
        addrPanel.add(addr2Field);
        mainPanel.add(addrPanel);
        mainPanel.add(new JLabel(" "));
        mainPanel.add(sizes);

        String[] buttons = { "OK", "Cancel"};

        int c = JOptionPane.showOptionDialog(
                null,
                mainPanel,
                "My Panel",
                JOptionPane.DEFAULT_OPTION,
                JOptionPane.PLAIN_MESSAGE,
                null,
                buttons,
                buttons[0]
         );

        if(c ==0){
            new Envelope(nameField.getText(), surnameField.getText(), addr1Field.getText()
                    , addr2Field.getText(), sizes.getSelectedIndex());
        }

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new Main();
    }
}
0 голосов
/ 27 мая 2010

Вы можете использовать JOptionPane. Вы можете добавить любой компонент Swing к нему.

Создайте панель со всеми необходимыми компонентами, кроме кнопок, а затем добавьте панель на панель параметров. Единственная проблема с этим подходом заключается в том, что по умолчанию основное внимание будет уделено кнопкам. Для решения этой проблемы см. Решение, представленное Dialog Focus .

0 голосов
/ 27 мая 2010

Если разрешено использовать GUI Builder, я бы порекомендовал вам IntelliJ IDEA

Вы можете создать что-то подобное примерно за 5 - 10 минут.

Если это невозможно (возможно, вы хотите практиковаться, учиться или что-то еще), я бы вместо этого использовал JFrame) с CardLayout

Не должно быть так сложно сделать.

0 голосов
/ 27 мая 2010

Вам нужно будет использовать JDialog. Нет смысла возиться с JOptoinPane - он не предназначен для сбора больше, чем простая строка. Кроме того, используйте MigLayout , TableLayout или JGoodies формы - это поможет вам получить хороший макет, который легко кодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...