Реализация JProgressBar

Я разработал фрейм, чтобы показать в режиме реального времени ход реализации моей графической базы данных. Для этой цели я разработал следующую рамку и ее компоненты. Проблема в том, что он отображается после завершения БД. Как я могу реализовать JProgressBar, который окружает фрагмент кода внизу, помещая его в протектор?

Фрейм, на котором размещена кнопка, вызывается в основном с помощью следующего

            EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {

            Interface frame = new Interface();
            frame.setVisible(true);

            } catch (Exception e) {
            e.printStackTrace();
            }

// Код кнопки

btnNewButton_1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {


    // I have created this frame to show the progress of the DB creation
    JFrame converterFrame = new JFrame();
    converterFrame.setVisible(true);
    converterFrame.setBounds(100, 100, 650, 288);
    JPanel contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    converterFrame.setContentPane(contentPane);
    contentPane.setLayout(null);
    contentPane.setVisible(true);

    JPanel panelNeo1 = new JPanel();
    panelNeo1.setBackground(SystemColor.text);
    panelNeo1.setBounds(6, 6, 638, 254);
    panelNeo1.setVisible(true);
    contentPane.add(panelNeo1);
    panelNeo1.setLayout(null);

    JLabel labelNeo1 = new JLabel("CSV BORO Converter");
    labelNeo1.setForeground(Color.DARK_GRAY);
    labelNeo1.setBounds(16, 19, 260, 37);
    panelNeo1.add(labelNeo1);
    labelNeo1.setIcon(new ImageIcon(Interface.class.getResource("/javax/swing/plaf/metal/icons/ocean/hardDrive.gif")));
    labelNeo1.setFont(new Font("Lucida Grande", Font.BOLD | Font.ITALIC, 20));
    labelNeo1.setBackground(Color.WHITE);
    labelNeo1.setOpaque(true);
    labelNeo1.setVisible(true);

    JPanel panelNeo2 = new JPanel();
    panelNeo2.setBounds(16, 60, 605, 167);
    panelNeo1.add(panelNeo2);
    panelNeo2.setBackground(SystemColor.textHighlight);
    panelNeo2.setLayout(null);
    panelNeo2.setVisible(true);

    JProgressBar progressBar = new JProgressBar();
    progressBar.setBounds(27, 89, 547, 20);
    panelNeo2.add(progressBar);
    panelNeo2.setVisible(true);

    JLabel labelNeo2 = new JLabel(" Processing: Number of row");
    labelNeo2.setBackground(Color.WHITE);
    labelNeo2.setOpaque(true);
    labelNeo2.setBounds(28, 36, 184, 20);
    panelNeo2.add(labelNeo2);
    labelNeo2.setVisible(true);

    JLabel labelNeo3 = new JLabel("");
    labelNeo3.setBackground(Color.WHITE);
    labelNeo3.setBounds(212, 36, 76, 20);
    labelNeo3.setOpaque(true);
    panelNeo2.add(labelNeo3);
    labelNeo3.setVisible(true);

    JLabel labelNeo4 = new JLabel();
    labelNeo4.setText(String.valueOf(200000));
    labelNeo4.setBackground(Color.WHITE);
    labelNeo4.setBounds(311, 36, 70, 20);
    labelNeo4.setOpaque(true);
    panelNeo2.add(labelNeo4);
    labelNeo4.setVisible(true);

    JLabel labelNeo6 = new JLabel("of");
    labelNeo6.setOpaque(true);
    labelNeo6.setBackground(Color.WHITE);
    labelNeo6.setBounds(288, 36, 23, 20);
    panelNeo2.add(labelNeo6);
    labelNeo6.setVisible(true);


    // I want to put a JProgressBar that surround the following function

            createDB();

                    // In addition I would like to set in my frame a value 
                    // coming from my function and set it in labelNeo3.setText(value)

    //End of Code progress bar          

    }
});

person QGA    schedule 05.08.2013    source источник
comment
для лучшей помощи скорее опубликуйте SSCCE, короткий, исполняемый, компилируемый, путем отключения, удаления множества бесполезных JComponents и добавьте четкое описание ваших намерений с помощью JProgressBar   -  person mKorbel    schedule 05.08.2013


Ответы (1)


Лучше создать новый поток, выполняющий метод createDB(), чтобы избежать зависания графического интерфейса. Если вы хотите отслеживать ход выполнения этого метода, он должен вызывать (прямо или косвенно) progressBar.setValue(int). Для получения дополнительной информации см. этот учебник: http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html

person pkalinow    schedule 05.08.2013