[英]How to automatically resize buttons on BorderPane as the window is resized?
[英]How to automatically resize JFreeChart when window is resized
我在JFrame
内的JPanel
内的ChartPanel
内有一个图表。 我目前有BoxLayou
t的框架和FlowLayout
的JPanel
。 我想让图表在调整窗口大小时自动调整大小。 我已经尝试了在这里找到的所有解决方案,唯一GridLayout
是将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);
我在这里尝试过该解决方案,但是添加子面板对我没有任何帮助。 我认为不必为了使图表调整大小而添加额外的面板。 我该如何仅使用chartPanel
, JPanel
和JFrame
呢?
唯一有效的方法是将JPanel布局设置为GridLayout,但我不能使用它,因为JPanel中有其他组件,并且它们的大小都相同(我需要图表比其余的更大)。
然后使用网格布局,或者更好, BorderLayout
对JPanel并放置一个新JPanel中的其他组件,一个使用,说的FlowLayout,并添加的JPanel的主要原因之一。 Nest JPanels,每个都使用各自的布局来实现最灵活的GUI和设计。
我认为不必为了使图表调整大小而添加额外的面板。
是的你是。
我有图表和一堆按钮(图表下方),这些按钮可让用户与图表进行交互。 显然,我不希望按钮与图表本身一样大。 当前,所有按钮和chartPanel都位于mainPanel内部。
然后使用BorderLayout,将图表置于BorderLayout.CENTER位置,并将按钮放入BorderLayout.PAGE_END位置的JPanel中(如果需要,该面板使用默认的FlowLayout,或者其他效果最佳的布局)。
例如:
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());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.