gpt4 book ai didi

java - 显示 JPanel 到 JFrame 另一个类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:33 27 4
gpt4 key购买 nike

我有一个主 JFrame 和三个包含不同饼图的 java 类,这些饼图位于面板中。我想调用主 jframe 中的三个饼图类。我怎么能那样做? enter image description here

//我有三个这样的图表类在面板内创建不同的图表

public class PiePanel extends Observer {

Singleton connCC = Singleton.getInstance();
Connection con = null;
Statement stm = null;

PiePanel(Subject s) {
panel = new JPanel();
sub = s;
}

@Override
public void update() {
try {
con = connCC.getDBconnection();
stm = con.createStatement();
ResultSet rs = stm.executeQuery("Select pet_name as pet, count(pet_ID) AS 'count' from Pet group by pet_name");
DefaultPieDataset dataset = new DefaultPieDataset();
while (rs.next()) {
dataset.setValue(rs.getString("pet"), Integer.parseInt(rs.getString("count")));
}

JFreeChart pieChart = ChartFactory.createPieChart("Header", dataset, true, true, false);
PiePlot plot = (PiePlot) pieChart.getPlot();
plot.setSimpleLabels(true);

PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator(
"{0}: {1} ({2})", new DecimalFormat("0"), new DecimalFormat("0%"));
plot.setLabelGenerator(gen);

panel.add(new ChartPanel(pieChart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(335, 235);
}
});

panel.validate();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}

//下面是一个将所有面板放在列表中的类

 public class Subject {
private List<Observer> panel = new ArrayList<Observer>();
public Subject(){
panel.add(new BarPanel(this));
panel.add(new AreaPanel(this));
panel.add(new PiePanel(this));
}
public List<Observer> getChart(){
return panel;
}

//主要

public class Main {

public static void main(String[] args) {

Subject s = new Subject();

while (true) {
String input = JOptionPane.showInputDialog(null, "Input value:");
if ("d".equals(input) || "w".equals(input)) {
try {
//String value = Integer.parseInt(input);
s.setState(input);
} catch (Exception e) {
System.exit(0);
}
} else {
System.out.println("Wrong Input!");
System.exit(0);
}

}
}

现在我想将此列表传递到另一个 JFrame 类中,就像图片中那样。

最佳答案

您的问题是您以默认方式向使用 BorderLayout 的容器添加了三个组件,这导致 BorderLayout.CENTER 中添加的每个组件都覆盖了之前添加的所有其他组件。如果你想显示三个组件,你可以:

  • 使用 BorderLayout 常量将组件添加到使用 BorderLayout 的容器中的不同位置,或者
  • 使用不同的布局,这里可能是 GridLayout(3, 1),或者
  • 如果您想要一个显示更多组件的更复杂的 GUI,请嵌套 JPanel,每个都使用自己的布局管理器。
    • 例如,如果您想在侧面显示饼图,那么我会将它们放入使用 GridLayout 的 JPanel 中,然后将使用 JPanel 的 GridLayout 添加到 BorderLayout-using 主 GUI 中BorderLayout.LINE_END 位置,或您想要的任何位置。

另一方面,如果您的目标是将一个 JPanel 换成另一个以响应事件,则使用 CardLayout 可以轻松高效地交换组件。

关于java - 显示 JPanel 到 JFrame 另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672002/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com