Наложение компонентов Swing - PullRequest
       4

Наложение компонентов Swing

4 голосов
/ 05 февраля 2010

Возможно ли вообще, чтобы один компонент накладывался (или накладывался) на другой в Swing ?

Я думаю о наличии индикатора выполнения (на переднем плане), который будет располагаться прямо над таблицей JTable (на заднем плане), пока инициализация таблицы продолжается ...

Ответы [ 5 ]

4 голосов
/ 05 февраля 2010

Да, есть несколько способов сделать это.

Это можно сделать, добавив его на стеклянную панель, но это обычно блокирует ваш пользовательский интерфейс.

Я бы посмотрел на JXLayer , который позволяет вам оборачивать компоненты для выполнения дополнительных заданий рисования. Существует также JBusyComponent , который опирается на эту библиотеку и, вероятно, выполняет то, что вы хотите.

1 голос
/ 05 февраля 2010

Для вашего случая я предложил вам создать пользовательскую таблицу, расширяющую JTable, а затем добавить ProgressBar в качестве дочернего элемента пользовательского компонента.

Очень грубая реализация:

public class TableProgress extends JTable {

    public TableProgress() {
        JProgressBar comp = new JProgressBar();
        add(comp);
        comp.setLocation(100, 100);
        comp.setSize(100, 100);
    }

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setLayout(new BorderLayout());
        jFrame.setPreferredSize(new Dimension(500, 500));
        TableProgress comp = new TableProgress();
        jFrame.getContentPane().add(comp, BorderLayout.CENTER);

        jFrame.pack();
        jFrame.setVisible(true);
    }

}
0 голосов
/ 08 февраля 2010

Я бы использовал JLayeredPanes . Поместите таблицу на нижнюю панель и добавьте еще одну панель для индикатора выполнения. Если вы хотите заблокировать ввод данных из таблицы, сделайте так, чтобы панель индикатора хода выполнения покрывала таблицу и прикрепила к ней прослушиватель мыши.

0 голосов
/ 05 февраля 2010

А сделай это сам, можно использовать стекло:

  • сделай его видимым и нарисуй прогрессбар
  • после инициализации таблицы удалите компоненты из стекла и скрыть это
0 голосов
/ 05 февраля 2010

Я далеко не гуру в программировании на Swing, поэтому мой ответ будет не слишком точным. Ответ - да =). Вы можете взглянуть на панели из JFrame и поместить индикатор выполнения на стеклянную панель или многослойную панель.

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