gpt4 book ai didi

java - 使用不同的 JPanel 替换 JPanel

转载 作者:行者123 更新时间:2023-12-01 23:55:07 24 4
gpt4 key购买 nike

嗨,这是一个基本问题。在我的代码中,我在构造函数中创建一个 gui,然后嵌套一个 ActionListener 类来处理按钮更改。此代码将创建 gui,并且操作监听器正确地通过 actionPerformed 方法运行。但是,我尝试了多种方法来更改 GUI 中的面板,但我觉得我设置程序的方式不可能使其工作。抱歉,如果这是重复的,但在 S.O. 上搜索了一段时间后。我还没有找到可以帮助我解决问题的好例子。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

import org.math.plot.Plot2DPanel;
import org.math.plot.plotObjects.BaseLabel;

public class GraphGui extends JFrame {

//default width and height of the GUI
private static final int WIDTH = 1200;
private static final int HEIGHT = 700;

GraphPlot gp = new GraphPlot();
Plot2DPanel plotPanel =gp.determinePlotToPlot("duration");

/**
* This is the constructor that initializes the JFrame and the layout of the GUI.
* The radio buttons are also created here and grouped accordingly.
*/
public GraphGui() {
//title of GUI
setTitle("VibeTech Graph Gui");

//First JRadioButton for date vs duration
JRadioButton durToDate = new JRadioButton("Duration vs. Date");
durToDate.addActionListener(new RadioButtonListener());
durToDate.setActionCommand("duration");
durToDate.setSelected(true);

//JRadioButton for weight vs date
JRadioButton weightToDate = new JRadioButton("Weight vs. Date");
weightToDate.addActionListener(new RadioButtonListener());
weightToDate.setActionCommand("weight");

//JRadioButton for plan type vs date
JRadioButton planToDate = new JRadioButton("Plan vs. Date");
planToDate.addActionListener(new RadioButtonListener());
planToDate.setActionCommand("level");

//button group of the buttons to display them as one group
ButtonGroup group = new ButtonGroup();
group.add(planToDate);
group.add(weightToDate);
group.add(durToDate);

//create JPanel to add objects to
JPanel jplRadio = new JPanel();
jplRadio.setLayout(new GridLayout(0, 1));
//add radio buttons
jplRadio.add(planToDate);
jplRadio.add(weightToDate);
jplRadio.add(durToDate);

Plot2DPanel dvt = new Plot2DPanel();
dvt.addLinePlot("Duration over Time", gp.getDate(), gp.getDuration());
BaseLabel title = new BaseLabel("Duration over Time", Color.RED,
0.5, 1.1);
title.setFont(new Font("Courier", Font.BOLD, 20));
dvt.addPlotable(title);
dvt.setAxisLabels("Time", "Duration");

setLayout(new BorderLayout());
add(jplRadio, BorderLayout.WEST);
add(plotPanel, BorderLayout.EAST);

setSize(WIDTH, HEIGHT);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

//main method to run program
public static void main(String [ ] args)
{
//create new GUI
@SuppressWarnings("unused")
GraphGui test = new GraphGui();
}

//create a radio button listener to switch graphs on button press
class RadioButtonListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("duration")) {
plotPanel = gp.determinePlotToPlot("duration");
} else if (e.getActionCommand().equals("weight")) {
plotPanel = gp.determinePlotToPlot("weight");
} else if (e.getActionCommand().equals("level")) {
plotPanel = gp.determinePlotToPlot("level");
}
//here is where I tried to do removes, adds, and validates but
//I have trouble getting to the frame itself to remove the JPanel
//component. I think this is a setup problem.
}
}
}

最佳答案

您需要添加面板并重新验证/重新绘制JFrame才能显示:

add(plotPanel, BorderLayout.EAST);
revalidate();
repaint();

更好用CardLayout管理此类功能。

关于java - 使用不同的 JPanel 替换 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747357/

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