03. maj 2004 - 18:46Der er
40 kommentarer og 1 løsning
Graf i Java
Jeg bruger en graf i JFrame. Den skal ligger på en JPanel. Hvordan gør jeg det? Den skal modtage et antal data(double) også bare udskrive en graf over dem i den rækkefølge. Det behøver bestemt ikke at være noget avanceret, bare man kan se værdi for hver værdi. Altså må X-aksen godt gå fra 0 - antal værdier, men y-aksen skal gå fra 0 - 100.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
class DrawArea extends JPanel{ public DrawArea(){ xP = new int[]{100,125,150,200,250,280,340,400,470,630}; yP = new int[]{150,250,350,450,475,400,350,250,100,75}; xdP = new double[xP.length]; ydP = new double[xP.length];
for(int i = 0; i < xP.length; i++){ xdP[i] = (double)xP[i] + 10.25; ydP[i] = (double)yP[i] + 10.25; } }
public void paint(Graphics g){ g.drawString("Y", 47, 45); g.drawLine(50, 50, 50, 550); // line Y g.drawString("X", 555, 554); g.drawLine(50, 550, 550,550); // line X
for(int i = 50; i < 550; i += 50){ g.drawLine(47, i , 53, i); g.drawLine(50+i, 553 ,50+ i, 547); }
public class DinJFrame extends javax.swing.JFrame { public DinJFrame(){ drawArea = new DrawArea(); getContentPane().add(drawArea, java.awt.BorderLayout.CENTER); setSize(700,700); }
private DrawArea drawArea; }
class DrawArea extends JPanel{ public DrawArea(){ xP = new int[]{100,125,150,200,250,280,340,400,470,630}; yP = new int[]{150,250,350,450,475,400,350,250,100,75}; xdP = new double[xP.length]; ydP = new double[xP.length];
for(int i = 0; i < xP.length; i++){ xdP[i] = (double)xP[i] + 10.25; ydP[i] = (double)yP[i] + 10.25; } }
public void paint(Graphics g){ g.drawString("Y", 47, 45); g.drawLine(50, 50, 50, 550); // line Y g.drawString("X", 555, 554); g.drawLine(50, 550, 550,550); // line X
for(int i = 50; i < 550; i += 50){ g.drawLine(47, i , 53, i); g.drawLine(50+i, 553 ,50+ i, 547); }
Når jeg tilføjer det grafen på en panel bliver et kun en med lille firkant på omkring 1*1 cm. Hvordan gør jeg den større? Når man tilføjer TextField giver man jo en parameter med så det ved hvor bred den skal være. Den skal vel også på en eller anden måde fortælles hvor stort "grafens panel skal være.
Jeg har prøve at setSize af den Panel som den tilføjes men det virker ikke.
Der har jeg ikke noget kun din kode altså: class DrawArea extends JPanel{ public DrawArea(){ xP = new int[]{100,125,150,200,250,280,340,400,470,630}; yP = new int[]{150,250,350,450,475,400,350,250,100,75}; xdP = new double[xP.length]; ydP = new double[xP.length];
for(int i = 0; i < xP.length; i++){ xdP[i] = (double)xP[i] + 10.25; ydP[i] = (double)yP[i] + 10.25; } }
public void paint(Graphics g){ g.drawString("Y", 47, 45); g.drawLine(50, 50, 50, 550); // line Y g.drawString("X", 555, 554); g.drawLine(50, 550, 550,550); // line X
for(int i = 50; i < 550; i += 50){ g.drawLine(47, i , 53, i); g.drawLine(50+i, 553 ,50+ i, 547); }
Jamen det er bare din DrawArea jeg har omdøbt: class DrawGraf extends JPanel{
private int[] xP, yP; private double[] xdP, ydP; public DrawGraf(){ xP = new int[]{100,125,150,200,250,280,340,400,470,630}; yP = new int[]{150,250,350,450,475,400,350,250,100,75}; xdP = new double[xP.length]; ydP = new double[xP.length];
for(int i = 0; i < xP.length; i++){ xdP[i] = (double)xP[i] + 10.25; ydP[i] = (double)yP[i] + 10.25; } }
public void paint(Graphics g){ g.drawString("Temperatur", 47, 45); g.drawLine(50, 50, 50, 550); // line Y g.drawString("Tid / sec.", 555, 554); g.drawLine(50, 550, 550,550); // line X
for(int i = 50; i < 550; i += 50){ g.drawLine(47, i , 53, i); g.drawLine(50+i, 553 ,50+ i, 547); }
Du må have tilføjet nogle andre komponenter til den klasse hvor du adder DrawGraf, så der derved ikke er mere plads tilbage - ellers kan jeg ikke se hvad der er galt.
Hvis du følger stilen i min kommentar 03/05-2004 22:50:54 kan det kun virke, ellers prøv at bruge den som basis.
Så er jeg faktisk ved at være i mål;-) Jeg har fået tegnet grafen og mangler kun en ting. Når jeg nu opdatere grafen virker det som om den tidligere graf ikke bliver slettet. Hvordan laver jeg det om, skal jeg bruge dobbeltbuffering?
Det mærkelig er nemlig at når jeg minimere mit vindue så forsvinder alt det jeg ikke ønsker skal være der - og det er ud som det skal!
Jamen jeg tegnet en graf på min panel - men når jeg tegner en ny forsvinder den gamle ikke. Hvorfor ikke? Kan man ikke kaldet noget i stil med Invalidate() som i C#? Altså så man får gentegnet hele området?
Der bliver også tegnet noget af knapperne i graf-panellet - helt oppe i venstre hjørne. Det er vildt mærkeligt! Men det hele ser perfekt ud hvis jeg minimere vinduet og derefter maksismere det.
public class UserInterface extends JFrame implements ActionListener { private JTextField channel,name,adminname,adminpassword,numbers; private JButton login,update,vis; private JPanel p3 = new JPanel(); private ServerInterface Server; private Timer timer; private int ch = 1; private int ARRAY_SIZE = 120; private DrawArea drawArea = new DrawArea(); private double temp[] = new double[ARRAY_SIZE];
public UserInterface(ServerInterface s) { super(); Server = s; setTitle("Thermo Surveillance System");
//Panel til input/output felter JPanel edit = new JPanel(); edit.setLayout(new GridLayout(4,1,5,5)); edit.add(new JLabel("ChannelName:")); edit.add(name = new JTextField(8)); edit.add(new JLabel("ChannelNummer")); edit.add(channel = new JTextField(8)); edit.add(new JLabel("Username:")); edit.add(adminname = new JTextField(8)); edit.add(new JLabel("Password:")); edit.add(adminpassword = new JTextField(8)); edit.setBackground(Color.gray);
//Panel til knapper JPanel buttom = new JPanel(); buttom.setLayout(new GridLayout(3,1,5,5)); buttom.add(login = new JButton("Login")); buttom.add(vis = new JButton("Vis Information")); buttom.add(update = new JButton("Skift Channel navn")); buttom.setBackground(Color.gray);
//tilføjer buttom og edit til panel control JPanel control = new JPanel(); control.setLayout(new BorderLayout()); control.add(edit,BorderLayout.WEST); control.add(buttom,BorderLayout.EAST);
//Panel til tilfojer til JPANEL getContentPane().setLayout(new BorderLayout()); getContentPane().add(control,BorderLayout.SOUTH); getContentPane().add(drawArea, java.awt.BorderLayout.CENTER);
//aktivere listener på knapperne login.addActionListener(this); update.addActionListener(this); vis.addActionListener(this); channel.addActionListener(this);
//Create an starts timer timer = new Timer(30000,this); timer.start();
} } class DrawArea extends JPanel{ int Y_max = 120; int X_max = 120; int indryk = 50;
public DrawArea(){
xdP = new double[120]; ydP = new double[120]; for(int i = 0; i < xdP.length; i++) xdP[i] = i+indryk;
}
public void setValues(double [] temp){ this.ydP = temp; this.repaint(); }
public void paint(Graphics g){ g.drawString("Temperatur", indryk-3, indryk-5); g.drawLine(indryk, indryk, indryk, X_max); // line Y g.drawString("Tid / 10 min", 2*X_max, X_max+4); g.drawLine(indryk, Y_max, 2*X_max,X_max); // line X
//streger på y aksen og værdier for(int i = indryk,count = 0; i < X_max; i += 10){ g.drawLine(indryk-3, i , indryk+3, i); g.drawString(""+(120-i),indryk-20, i+5); //g.drawLine(indryk+i, X_max+3 ,indryk+ i, X_max-3); } //Streger på x-aksen og værdier for(int i = 0; i < 2*X_max-indryk+10; i += 10 ){ g.drawLine(indryk+i, X_max+3 ,indryk+ i, X_max-3); }
Jeg har oprettet en offentlig email. Hvis du skriver til theonlyone43221@hotmail.com - så sender jeg dig lige koden - så kan du selv se det ske. Gider du ikke lige at poste her når du har sendt mailen?
Jeg er kommet hjem nu - og jeg kan altså sagtens køre klientprorgammet hos mig! du har stuben og serinterfacet i samme biblioket som klienten - og de er alle compilet?
Okay - det er sku mærkeligt, jeg prøvede det - og det virkede ikke! Men det er jo også lige meget nu hvor det virker. Men jeg undskylder alt besværet! Mange tak for hjælpen - du har ærligt fortjent dine point:-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.