Java Swing App, почему не по центру на экране? - PullRequest
2 голосов
/ 25 сентября 2019

Я скачал приложение Java Swing, хотя у меня есть эта строка в приложении: demo.setLocationRelativeTo(null);

Почему оно не отцентрировано на экране?

Программа выглядит такthis:

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;

public class Bubble_Chart_AWT extends JFrame
{
  public Bubble_Chart_AWT(String s)
  {
    super(s);
    JPanel jpanel=createDemoPanel();
    jpanel.setPreferredSize(new Dimension(560,370));
    setContentPane(jpanel);
  }

  private JFreeChart createChart(XYZDataset xyzdataset)
  {
    JFreeChart jfreechart=ChartFactory.createBubbleChart("AGE vs WEIGHT vs WORK",
                                                         "Weight",
                                                         "AGE",
                                                         xyzdataset,
                                                         PlotOrientation.HORIZONTAL,
                                                         true,true,false);

    XYPlot xyplot=(XYPlot)jfreechart.getPlot();
    xyplot.setForegroundAlpha(0.65F);
    XYItemRenderer xyitemrenderer=xyplot.getRenderer();
    xyitemrenderer.setSeriesPaint(0,Color.blue);
    NumberAxis numberaxis=(NumberAxis)xyplot.getDomainAxis();
    numberaxis.setLowerMargin(0.2);
    numberaxis.setUpperMargin(0.5);
    NumberAxis numberaxis1=(NumberAxis)xyplot.getRangeAxis();
    numberaxis1.setLowerMargin(0.8);
    numberaxis1.setUpperMargin(0.9);

    return jfreechart;
  }

  public static XYZDataset createDataset()
  {
    DefaultXYZDataset defaultxyzdataset=new DefaultXYZDataset();
    double ad[]={30,40,50,60,70,80};
    double ad1[]={10,20,30,40,50,60};
    double ad2[]={4,5,10,8,9,6};
    double ad3[][]={ad,ad1,ad2};
    defaultxyzdataset.addSeries("Series 1",ad3);

    return defaultxyzdataset;
  }
  public JPanel createDemoPanel()
  {
    JFreeChart jfreechart=createChart(createDataset());
    ChartPanel chartpanel=new ChartPanel(jfreechart);

    chartpanel.setDomainZoomable(true);
    chartpanel.setRangeZoomable(true);

    return chartpanel;
  }

  public static void main(String args[])
  {
    SwingUtilities.invokeLater(() ->
    {
      Bubble_Chart_AWT demo=new Bubble_Chart_AWT("Bubble_Chart_AWT");
      demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      demo.setLocationRelativeTo(null);
      demo.pack();
      demo.setVisible(true);
    });
  }
}

Вам нужен этот [jfreechart-1.5.0.jar] в вашем проекте "lib" из http://repo1.maven.org/maven2/org/jfree/jfreechart/1.5.0/, чтобы запустить его.

Что мне делатьпоэтому он автоматически центрируется на экране, обычно работает «demo.setLocationRelativeTo (null)», но не в этом приложении.

1 Ответ

3 голосов
/ 25 сентября 2019

Это может решить вашу проблему, это произошло в моей системе:

Звоните pack() до , вы звоните setLocationRelativeTo(null), но звоните setLocationRelativeTo(null) до setVisible(true), вот так:

public static void main(String args[]) {
    SwingUtilities.invokeLater(() -> {
        Bubble_Chart_AWT demo = new Bubble_Chart_AWT("Bubble_Chart_AWT");
        demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        demo.pack();
        demo.setLocationRelativeTo(null);
        demo.setVisible(true);
    });
}

Простое переключение линий привело к центру графика на моем экране.

...