如何集成2个不同的JFrame? [英] How can I integrate 2 different JFrames?

查看:64
本文介绍了如何集成2个不同的JFrame?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我准备好可以生成CPU/时间图表的代码(我根据需要更改了其他代码).到目前为止,一切都很好,但是现在我无法将其集成到真正属于我并已被风格化的JFrame中!

I have a code ready that generates a CPU/Time chart (I changed another code according to my need). So far so good, but now I can't integrate it in a JFrame that is really mine and already stylized!

以下是图表的代码:

/** @see https://stackoverflow.com/a/5048863/230513 */
public class Atol extends ApplicationFrame {

private static final String TITLE = "Dynamic Series";
private static final String START = "Start";
private static final String STOP = "Stop";
private static final float MINMAX = 100;
private static final int COUNT = 2 * 60;
private static final int FAST = 100;
private static final int SLOW = FAST * 5;
private static final Random random = new Random();
private Timer timer;

public Atol(final String title) {
    super(title);
    final DynamicTimeSeriesCollection dataset
            = new DynamicTimeSeriesCollection(1, COUNT, new Second());
    dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2011));
    dataset.addSeries(gaussianData(), 0, "Gaussian data");
    JFreeChart chart = createChart(dataset);

    final JButton run = new JButton(STOP);
    run.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            String cmd = e.getActionCommand();
            if (STOP.equals(cmd)) {
                timer.stop();
                run.setText(START);
            } else {
                timer.start();
                run.setText(STOP);
            }
        }
    });

    final JComboBox combo = new JComboBox();
    combo.addItem("Fast");
    combo.addItem("Slow");
    combo.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if ("Fast".equals(combo.getSelectedItem())) {
                timer.setDelay(FAST);
            } else {
                timer.setDelay(SLOW);
            }
        }
    });
   this.add(new ChartPanel(chart), BorderLayout.CENTER);
   JPanel btnPanel = new JPanel(new FlowLayout());
   btnPanel.add(run);
   btnPanel.add(combo);
   this.add(btnPanel, BorderLayout.SOUTH);
    SystemInfo si = new SystemInfo();             //Criando uma nova classe de infos do Sistem
    HardwareAbstractionLayer hal = si.getHardware(); //Infos de Hardware do sistema
    CentralProcessor cpu = hal.getProcessor();      //E as informações da cpu
    long[] oldTricks = cpu.getSystemCpuLoadTicks();

    
    timer = new Timer(FAST, new ActionListener() {
        float cpu() {

            Double stats = cpu.getSystemCpuLoadBetweenTicks(oldTricks);
            //Convertendo o valor de uso da CPU
            stats = stats * 100d;
            double teste = Math.round(stats * 100.0) / 100.0;
            double d = teste;
            float f = (float) d;
            System.out.println(f);
            return f;
        }
        float[] newData = new float[1];

        @Override
        public void actionPerformed(ActionEvent e) {

            newData[0] = cpu();
            dataset.advanceTime();
            dataset.appendData(newData);
        }
    });
}


private float[] gaussianData() {

    float[] a = new float[COUNT];
    for (int i = 0; i < a.length; i++) {
        a[i] = 2;
    }
    return a;
}

private JFreeChart createChart(final XYDataset dataset) {
    final JFreeChart result = ChartFactory.createTimeSeriesChart(
            TITLE, "hh:mm:ss", "milliVolts", dataset, true, true, false);
    final XYPlot plot = result.getXYPlot();
    ValueAxis domain = plot.getDomainAxis();
    domain.setAutoRange(true);
    ValueAxis range = plot.getRangeAxis();
    range.setRange(-MINMAX, MINMAX);
    return result;
}

public void start() {
    timer.start();
}

public static void main(final String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Atol demo = new Atol(TITLE);
            demo.pack();

            demo.setVisible(true);
            demo.start();
        }
    });
}}

这是我的按钮代码,应该会在图表中显示一个jpanel:

And this is my code for the button that should bring up a jpanel with the chart:

private void kButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here: GRAFICO DE CPU
cardLayout.show(pnlCards, "cpu");
chartcpu.add(Atol);}  

它会立即更改JPanel卡,但我无法将其插入称为图表的JPanel中(此图表"是另一个jpanel,位于Card面板内),它将打开一个新窗口!而且他需要留在这个图表"中JPanel

It changes the JPanel Card just right but I can't insert it in this JPanel called chart (this "chart" is a other jpanel and is inside the Card panel), it opens a new window! And he needs to stay inside this "chart" JPanel

在此处输入图片描述

如何在另一个类的JPanel chartcpu中调用Atol类图?

How can i invoke the Atol class chart in my JPanel chartcpu which is in another class?

它奏效了,但是现在我该如何接受所​​有这些装饰,只留下图表? 出现图表

It worked but now how can i take all these decorations and leave only the chart? Chart appeared

推荐答案

如果我理解正确,您想在另一个框架内显示一个框架吗?在这种情况下,您可以使用 JInternalFrame

If I understand it correctly, you want to show a frame inside another frame right? If this is the case, you could use JInternalFrame

// Define your main frame
JFrame mainFrame = new JFrame();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(null);
mainFrame.setSize(800, 800);
mainFrame.setVisible(true);


// Define your subFrame
JInternalFrame subFrame = new JInternalFrame();
subFrame.setLocation(200, 200);
subFrame.setSize(250, 250);        
subFrame.setClosable(false);
subFrame.setResizable(false); 
subFrame.setVisible(true);


// Add your subFrame to mainFrame and repaint
mainFrame.add(subFrame);
mainFrame.repaint();

删除InternalFrame的边框

Removing the borders of InternalFrame

subFrame.setBorder(null);        
BasicInternalFrameUI bFrame = (BasicInternalFrameUI)subFrame.getUI();
bFrame.setNorthPane(null);

这篇关于如何集成2个不同的JFrame?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆