Hey Leute,
ich habe eine Oberfläche (Container mit 2 Buttons). Der erste Buttonaufruf funktioniert, jetzt habe ich jedoch ein Programm geschrieben, dass einen XY-Graphen wiedergeben soll. Dieses soll aufgerufen werden, wenn man auf den zweiten Button klickt. Leider funktioniert es nicht. Ich habe im ActionListener (in meiner Klasse leftPanel) bereits ein neues Objekt das auf die Graphen-Klasse zeigt angelegt. (die Klassen befinden sich auch alle im gleichen Ordner ;-) )
vielleicht findet ja jmd meinen Fehler...
meine main:
meine mainGui
mein leftPanel (mit Klasse ActionListener)
Mein mainPanel:
mein gridBagLayout
und mein Graph (welches bei Schritt 2 ausgelöst werden sollte, aber nicht funktioniert)
ich habe eine Oberfläche (Container mit 2 Buttons). Der erste Buttonaufruf funktioniert, jetzt habe ich jedoch ein Programm geschrieben, dass einen XY-Graphen wiedergeben soll. Dieses soll aufgerufen werden, wenn man auf den zweiten Button klickt. Leider funktioniert es nicht. Ich habe im ActionListener (in meiner Klasse leftPanel) bereits ein neues Objekt das auf die Graphen-Klasse zeigt angelegt. (die Klassen befinden sich auch alle im gleichen Ordner ;-) )
vielleicht findet ja jmd meinen Fehler...
meine main:
Java:
public class main {
public static void main(String[]args){
new mainGui();
}
}
meine mainGui
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class mainGui extends JFrame {
private static final long serialVersionUID = 5257812626494937069L;
final protected String WELCOME = "Grüße";
final protected String SCHRITT1 = "Test1";
final protected String SCHRITT2 = "Graph";
protected leftPanel jpLeft = new leftPanel(this);
protected mainPanel jpMain = new mainPanel(this);
public mainGui() {
GridBagLayout gbl = new GridBagLayout();
Container container = this.getContentPane();
gridBagLayoutHelper.addComponent(container, gbl, jpLeft, 0, 0, 1, 1, 0.2, 1);
gridBagLayoutHelper.addComponent(container, gbl, jpMain, 1, 0, 1, 1, 0.8, 1);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(gbl);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
d = new Dimension(d.width/2,d.height/2);
this.setSize(d);
this.setLocationRelativeTo(null);
this.setTitle("Test des Programms");
this.setVisible(true);
}
}
mein leftPanel (mit Klasse ActionListener)
Java:
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class leftPanel extends JPanel implements ActionListener {
/**
*
*/
private JButton Schritt1;
private JButton Schritt2;
private mainGui parent;
public leftPanel(mainGui parent) {
this.parent = parent;
GridBagLayout gbl = new GridBagLayout();
Container container = this;
Schritt1 = new JButton("Schritt 1");
Schritt2 = new JButton("Schritt 2");
Schritt1.setActionCommand("Schritt_1");
Schritt1.addActionListener(this);
Schritt2.setActionCommand("Schritt_2");
Schritt2.addActionListener(this);
gridBagLayoutHelper.addComponentPadding(container, gbl, Schritt1, 0, 0, 1, 1, 1, 1);
gridBagLayoutHelper.addComponentPadding(container, gbl, Schritt2, 0, 1, 1, 1, 1, 1);
this.setLayout(gbl);
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Schritt_1")) {
CardLayout cl = (CardLayout) (parent.jpMain.getLayout());
cl.show(parent.jpMain, parent.SCHRITT1);
//funktionierender Button bzw Progammaufruf
test t = new test(parent);
} else if (event.getActionCommand().equals("Schritt_2")) {
CardLayout cl = (CardLayout) (parent.jpMain.getLayout());
cl.show(parent.jpMain, parent.SCHRITT2);
graph c = new graph(parent);
}
}
}
Mein mainPanel:
Java:
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class mainPanel extends JPanel{
private static final long serialVersionUID = 3250453526650826616L;
private mainGui parent;
public mainPanel(mainGui parent){
this.parent = parent;
this.setLayout(new CardLayout());
JPanel card1 = new JPanel();
card1.add(new JLabel("Hallo Nutzer, willkommen"));
JPanel card2 = new JPanel();
card2.add(new JLabel("Schritt 1 ausgeführt"));
JPanel card3 = new JPanel();
card3.add(new JLabel("Schritt 2 ausgeführt"));
//Hinzufügen der 'cards' zum Mainpanel
//über den Hinteren String können sie nach vorne geholt werden
this.add(card1, parent.WELCOME);
this.add(card2, parent.SCHRITT1);
this.add(card3, parent.SCHRITT2);
}
}
mein gridBagLayout
Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
public class gridBagLayoutHelper {
public static void addComponent(Container cont, GridBagLayout gbl,
Component c, int x, int y, int width, int height, double weightx,
double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.WEST;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbl.setConstraints(c, gbc);
cont.add(c);
}
public static void addComponentFill(Container cont, GridBagLayout gbl,
Component c, int x, int y, int width, int height, double weightx,
double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
gbl.setConstraints(c, gbc);
cont.add(c);
}
public static void addComponentPadding(Container cont, GridBagLayout gbl,
Component c, int x, int y, int width, int height, double weightx,
double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.WEST;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
// Padding von 10 in alle Richtungen
gbc.insets = new Insets(10, 10, 10, 10);
gbl.setConstraints(c, gbc);
cont.add(c);
}
}
und mein Graph (welches bei Schritt 2 ausgelöst werden sollte, aber nicht funktioniert)
Java:
import java.awt.*;
import java.io.*;
import java.text.*;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.*;
import org.jfree.ui.*;
public class Graph {
public Graph(mainGui parent) {
EventQueue.invokeLater(() -> {
ApplicationFrame frame = new ApplicationFrame("Anzeige der Testwerte");
Graph test = new Graph(parent);
try {
frame.add(test.createChart("Test"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
/*
//Main-Methode, damit das Programm einzeln laufen kann
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
ApplicationFrame frame = new ApplicationFrame("Anzeige der Testwerte");
Graph test = new Graph();
try {
frame.add(test.createChart("Test"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
*/
private ChartPanel createChart(String chartTitle) throws IOException {
//title, x-axis label, y-axis label, data, create legend?, generate tooltips?, generate URLs?
JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle,
"Zeit", "Testwerte", createDataset(), true, true, false);
ChartPanel chartPanel = new ChartPanel(chart);
XYPlot plot = chart.getXYPlot();
DateAxis axis = (DateAxis) plot.getDomainAxis();
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ssX");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
axis.setDateFormatOverride(SimpleDateFormat.getTimeInstance());
plot.setBackgroundPaint(Color.WHITE);
return chartPanel;
}
private TimeSeriesCollection createDataset() throws IOException {
//Klassifizierung der Textdatei + Inhalt
File test = new File("test.txt");
String line1;
String line2;
try ( // Einlesen der Textdatei
BufferedReader br = new BufferedReader(new FileReader(test))) {
//Inhalt wird zeilenweise gelesen
line1 = br.readLine();
line2 = br.readLine();
}
//TimeSeries wird kreiert
TimeSeries series = new TimeSeries("Testwerte");
TimeSeriesCollection dataset = new TimeSeriesCollection(series);
//......
return (TimeSeriesCollection) dataset;
}
//......
}