当调整窗口如何自动调整的JFreeChart

问题描述 投票:0回答:1

我有一个ChartPanelJPanelJFrame里面的图表。我现在有BoxLayout的框架和FlowLayoutJPanel。我想,当窗口大小的图表自动调整。我已经尝试了所有的解决方案,我发现这里的,只有那个工作是设置JPanel布局GridLayout的东西,但我不能使用它,因为我有其他组件在JPanel,这让他们都具有相同的尺寸(我需要的图表是比其他人更大)。

目前,我有:

chartPanel.setPreferredSize(new java.awt.Dimension(500, 250));

frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
mainPanel = new JPanel(new FlowLayout());
mainPanel.setPreferredSize(new Dimension(500, 500));
mainPanel.add(chartPanel);

frame.add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

我试着解决here但添加子面板,我什么也没做。我不认为我将不得不增加额外的面板只是为了使图表调整大小。我怎么能只用chartPanelJPanelJFrame办呢?

java swing jpanel jfreechart chartpanel
1个回答
1
投票

只有工作的事情是设置JPanel的布局,网格布局,但我不能使用它,因为我在JPanel中的其他成分,这让他们都具有相同的尺寸(我需要的图表是比其他人更大)。

然后使用网格布局,或者更好,BorderLayout对JPanel并放置其他组件的新JPanel内,一个使用,说的FlowLayout,并添加的JPanel的主要原因之一。鸟巢JPanels,各自使用自己的布局,以实现最灵活的图形用户界面和设计。

我不认为我将不得不增加额外的面板只是为了使图表调整大小。

是的你是。

我有让用户与图表交互的图表和一堆按钮(图表下方)。很显然,我不想的按钮是大如图表本身。目前,所有按钮和chartPanel都在里面mainPanel中。

然后使用BorderLayout的,在BorderLayout.CENTER位置的图表和按钮放入一个JPanel那就是在BorderLayout.PAGE_END位置,一个如果希望的话,使用默认的FlowLayout,或时工作最佳的任何其它布局。

例如:

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.*;
import javax.swing.border.Border;

public class ChartAndButtons extends JPanel {
    private static final long serialVersionUID = 1L;

    public ChartAndButtons() {
        JPanel mockChartPanel = createMockChart();
        int gap = 3;
        JPanel buttonPanel = new JPanel(new GridLayout(1, 0, gap, gap));
        buttonPanel.setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
        String[] buttonNames = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
        for (String buttonName : buttonNames) {
            buttonPanel.add(new JButton(buttonName));
        }

        setLayout(new BorderLayout());
        add(mockChartPanel, BorderLayout.CENTER);
        add(buttonPanel, BorderLayout.PAGE_END);
    }

    // ignore this -- it simply creates a JPanel as a placeholder
    // for your real JFreeChart panel   
    private JPanel createMockChart() {
        JLabel label = new JLabel("Mock Chart");
        label.setFont(label.getFont().deriveFont(Font.BOLD, 60f));
        Color color = Color.ORANGE;
        JPanel mockChartPanel = new JPanel(new GridBagLayout());
        mockChartPanel.add(label);
        Border outsideBorder = BorderFactory.createLineBorder(color, 40);
        int eb = 80;
        Border insideBorder = BorderFactory.createEmptyBorder(eb, eb, eb, eb);
        mockChartPanel.setBorder(BorderFactory.createCompoundBorder(outsideBorder, insideBorder));
        mockChartPanel.setBackground(color.brighter());

        return mockChartPanel;
    }

    private static void createAndShowGui() {
        ChartAndButtons mainPanel = new ChartAndButtons();

        JFrame frame = new JFrame("ChartAndButtons");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.