首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不同的JPanel替换JPanel

用不同的JPanel替换JPanel
EN

Stack Overflow用户
提问于 2013-04-02 00:35:11
回答 2查看 283关注 0票数 0

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

代码语言:javascript
复制
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.
    }
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-02 00:38:04

您需要添加面板并对JFrame执行revalidate/repaint操作才能显示:

代码语言:javascript
复制
add(plotPanel, BorderLayout.EAST);
revalidate();
repaint();

最好使用CardLayout来管理这种类型的功能。

票数 2
EN

Stack Overflow用户

发布于 2013-04-02 00:41:24

尝试使用CardLayout在面板之间切换。下面是我对类似问题的解决方案:https://stackoverflow.com/a/9377623/544983

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15747357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档