JOptionPane открывает еще один JFrame - PullRequest
0 голосов
/ 28 мая 2010

Итак, я продолжаю борьбу с этим: Создание Java-диалогов задача. Теперь моя JOptionPane открывает новое окно с наложением конверта, но я не могу изменить размер этого окна. Также я хотел, чтобы данные отправителя находились в верхнем левом углу, а данные получателя - в нижнем правом. Как я могу этого достичь? Существует также проблема с самим OptionPane. После того, как я нажму «ОК», откроется небольшое окно в верхнем левом углу экрана. Что это такое и почему оно появляется?
Мой код:

import java.awt.*;
import java.awt.Font;
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();
    }
}

class Envelope extends JFrame {

    private final int SMALL=0;
    private final int MEDIUM=1;
    private final int LARGE=2;
    private final int XLARGE=3;

    public Envelope(String n, String s, String a1, String a2, int i){
        Container content = getContentPane();

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        mainPanel.add(new JLabel("John Doe"));
        mainPanel.add(new JLabel("FooBar str 14"));
        mainPanel.add(new JLabel("Newark, 45-99"));

        JPanel dataPanel = new JPanel();
        dataPanel.setFont(new Font("sansserif", Font.PLAIN, 32)); //set size from i
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        mainPanel.setBackground(Color.ORANGE);
        mainPanel.add(new JLabel("Mr "+n+" "+s));
        mainPanel.add(new JLabel(a1));
        mainPanel.add(new JLabel(a2));

        content.setSize(450, 600);
        content.setBackground(Color.ORANGE);
        content.add(mainPanel, BorderLayout.NORTH);
        content.add(dataPanel, BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

Main http://img62.imageshack.us/img62/3619/mainscreensnapz001.jpg

альтернативный текст http://img24.imageshack.us/img24/8946/mainscreensnapz002.jpg

альтернативный текст http://img571.imageshack.us/img571/1621/mainscreensnapz003.jpg

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Теперь моя JOptionPane открывает новое окно с наложением конверта, но я не могу изменить размер этого окна.

Это потому, что вы используете JOptionPane, трей вместо JDialog или JFrame

Также я хотел, чтобы данные отправителя находились в верхнем левом углу, а данные получателя - в нижнем правом. Как мне этого добиться?

Как вы думаете, вы можете сделать это?

Существует также проблема с самим OptionPane. После того, как я нажму «ОК», откроется небольшое окно в верхнем левом углу экрана. Что это такое и почему оно появляется?

Это твой код, ты должен знать лучше. Это код в "новом конверте ..."

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

Похоже, вам не следует использовать для этого диалоговое окно параметров, а вместо этого создавать собственный JFrame.

...