Java-приложение - качается - всплывающее при щелчке правой кнопкой мыши меняет цвет фона - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с моим Java-приложением, и я не могу найти подходящий ответ.Таким образом, всплывающее меню по умолчанию, вызываемое правой кнопкой мыши, изменяет цвет фона моего графика позади всплывающего окна.Вы можете найти изображения ниже.Я рад оставить всплывающее окно по умолчанию без «глючного» поведения или разработать собственное, если необходимо.

Нажатие кнопки запускает поток данных и добавляет диаграмму в компонент JInternalFrame:

https://i.stack.imgur.com/CqQFx.png

Если щелкнуть правой кнопкой мыши изображение, появится всплывающее окно по умолчанию:

https://i.stack.imgur.com/j4GuT.png

Если я затем щелкну прочь, область прямоугольника, покрытая всплывающим окном, наложит диаграмму следующим образом:

https://i.stack.imgur.com/pGaV2.png

        TimeseriesMonitorModel model = new DefaultTweetMonitorModel();

        jif.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        try {

            jif.setContentPane(new TweetSeriesChartPane(model, TweetMonitor.keywords, tkc));
            jif.setSize(jif.getWidth(), jif.getHeight());
        } catch (InterruptedException ex) {
            Logger.getLogger(TweetMonitor.class.getName()).log(Level.SEVERE, null, ex);
        }

        jif.setVisible(true); 

, где jif - Jinternalframeи

   public TweetSeriesChartPane(TimeseriesMonitorModel model, String[] seriesNames, TweetKeywordCount tkc) throws InterruptedException {

    this.seriesNames = seriesNames;
    this.tkc = tkc;        
    this.model = model;


    XYChartTimeseries myRealTimeChart = new XYChartTimeseries();
    chart = myRealTimeChart.getChartWithTitle();

    List[] tweetData = model.getFrequencyCount(new AtomicIntegerArray(seriesNames.length)); // we are starting from 0

    int i = 0;
    for (String keyword : seriesNames) {
        List<Integer> yData = (List<Integer>) tweetData[1].get(i);
        chart.addSeries(keyword, tweetData[0], yData); // adding first value
        i++;
    }

    setLayout(new BorderLayout());

    XChartPanel<XYChart> chartPane = new XChartPanel<>(chart);
    add(chartPane);

    UpdateWorker worker = new UpdateWorker(this, seriesNames, this.tkc);
    worker.execute();

}

1 Ответ

0 голосов
/ 07 декабря 2018

Мне удалось временно решить вышеупомянутое.

Я специально проверил эту строку кода

XChartPanel<XYChart> chartPane = new XChartPanel<>(chart);

, которая расширяет Chart и Jpanel.Код взят из зависимости от карты знаний https://github.com/knowm/XChart/blob/develop/xchart/src/main/java/org/knowm/xchart/XChartPanel.java)

По-видимому, он добавляет прослушиватель и настроенное PopUpMenu.После просмотра, похоже, что при щелчке мышью за пределами области PopUpMenu перекраска не выполнялась.Поэтому я создал новый класс и попытался настроить его.Однако перерисовка мерцала на экране, и я не мог заставить его работать только в области PopUpMenu.

Я закончил тем, что отключил вызов .addMouseListener, так что теперь я не получаю никакого popUpMenu.Я грустный компромисс, ну да ладно.

КСТАТИ: Благодаря обоим, независимо от последнего ненужного комментария, который не добавил никакого значения.

Я прочитал ссылку, и я, хотя я предоставилдостаточно информации.

В любом случае, размещение в коде помогло мне устранить его

...