如何集成 2 个不同的 JFrames?
How can I integrate 2 different JFrames?
我已经准备好生成 CPU/Time 图表的代码(我根据需要更改了 another code)。到目前为止一切顺利,但现在我无法将它集成到真正属于我且已经程式化的 JFrame 中!
图表代码如下:
/** @see */
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:
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,位于卡片面板内),它打开了一个新的 window !他需要留在这个“图表”JPanel
enter image description here
如何在另一个 class 中的 JPanel chartcpu 中调用 Atol class 图表?
[编辑]
它起作用了,但现在我怎么能拿走所有这些装饰品而只留下图表呢?
Chart appeared
如果我没理解错的话,你想在另一个框架中显示一个框架,对吗?如果是这种情况,您可以使用 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 的边框
subFrame.setBorder(null);
BasicInternalFrameUI bFrame = (BasicInternalFrameUI)subFrame.getUI();
bFrame.setNorthPane(null);
我已经准备好生成 CPU/Time 图表的代码(我根据需要更改了 another code)。到目前为止一切顺利,但现在我无法将它集成到真正属于我且已经程式化的 JFrame 中!
图表代码如下:
/** @see */
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:
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,位于卡片面板内),它打开了一个新的 window !他需要留在这个“图表”JPanel
enter image description here
如何在另一个 class 中的 JPanel chartcpu 中调用 Atol class 图表?
[编辑] 它起作用了,但现在我怎么能拿走所有这些装饰品而只留下图表呢? Chart appeared
如果我没理解错的话,你想在另一个框架中显示一个框架,对吗?如果是这种情况,您可以使用 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 的边框
subFrame.setBorder(null);
BasicInternalFrameUI bFrame = (BasicInternalFrameUI)subFrame.getUI();
bFrame.setNorthPane(null);