WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 03.12.2003, 17:59   #1
jopp
Veteran
 
Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266


Standard java - jscrollpane & graphen

hi leute

ich habe probleme mit einen programm. und zwar schaffe ich es nicht scrollbalken in mein internalframe einzubinden. der graph ist aber eindeutig grösser als das scrollpane und somit sollten balken erzeugt werden.
hier der code:

Code:
package hilfe;

import javax.swing.*;
import java.sql.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

public class HauptFenster extends JFrame {

  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {
      e.printStackTrace();
    }

    new HauptFenster();
  }

  public HauptFenster() {
    super("HILFE");
    setSize(600, 300);
    setLocation(300, 300);
    JDesktopPane desk = new JDesktopPane();
    this.getContentPane().add(desk);
    desk.setDesktopManager(new DefaultDesktopManager());
    JInternalFrame jif = new JInternalFrame("GRAPH", true, true, true, true);
    jif.setSize(400,300);
    getContentPane().add(jif);
    jif.getContentPane().add(new JScrollPane(new JPanel(null, true).add(new Graph())));

    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent event) {
        System.exit(0);
      }
    });
    jif.setVisible(true);
    setVisible(true);
  }
}

class Graph extends Component {
  public Graph() {

  }

  public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;

    int[] data = null;
    int s = 0;
    int r = 0;

    try {
      Connection dbConn;
      Driver d = (Driver) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
      String URL = "jdbc:odbc:" + "CMSC446";
      dbConn = DriverManager.getConnection(URL, "nouser", "nopassword");
      System.out.println("db Connected...\n");
      // Java SQL objects...
      Statement stmt;
      stmt = dbConn.createStatement();
      ResultSet rs;
      rs = stmt.executeQuery("SELECT value FROM data WHERE dataid = 0");
      while(rs.next()) {
        s++;
      }
      data = new int[s];
      rs = stmt.executeQuery("SELECT value FROM data WHERE dataid = 0");
      while(rs.next()) {
        data[r] = rs.getInt("value");
        r++;
      }

    }
    catch (Exception e) {
      System.out.println("Read: " + e);
    }
    int x0 = 30;
    int y0 = 150;


    Shape xline = new Line2D.Double(x0,10,x0,170);
    Shape yline = new Line2D.Double(10,y0,590,y0);
    g2.setPaint(Color.blue);
    g2.draw(xline);
    g2.draw(yline);

    int x1 = 0;
    int x2 = 0;
    int y1 = 0;
    int y2 = 0;

    for(int z = 0 ; z < r-1 ; z++) {
      x1 = x0 + 1*z;
      x2 = x1 + 1;
      y1 = y0 - 1*(int)data[z];
      y2 = y0 - 1*(int)data[z+1];

      Shape linexy = new Line2D.Double(x1,y1,x2,y2);
      g2.setPaint(Color.red);
      g2.draw(linexy);
      y1 = 0;
      y2 = 0;
    }
   }
}
vielleicht weiß einer von euch die lösung

wäre echt dankbar. ich kämpfe nun schon seit tagen damit.

danke im vorraus

jopp
jopp ist offline   Mit Zitat antworten
Alt 05.12.2003, 00:41   #2
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

hast du schon mal überlegt die policy auf ALWAYS zu setzen
JScrollPane.setHorizontalScrollBarPolicy(int)
JScrollPane.setVerticalScrollBarPolicy(int)


ich hab den code nur überflogen, hab grad net mehr zeit aber das is mal eine abhilfe für den moment
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 10.12.2003, 11:48   #3
jopp
Veteran
 
Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266


Standard

danke für deine antwort, und sorry, dass ich erst so spät antworte.

habe es geschafft. die scrollbalken werden jetzt angezeigt. aber schon hat sich das nächste problem ergeben. und zwar wird der graph anscheinend immer wieder neu gezeichnet oder so. am einfachsten erklären es wohl die bilder:

erstes zeigt den graphen nach dem programmstart (es wurde noch nicht gescrollt)

zweites bild zeigt den graphen nach dem gescrollt wurde

also irgenwie scheint es mir, als würde das bild sehr oft neu gezeichnet werden, oder auch nur bestimmte bereiche.


ich habe gehört/gelesen, dass hierzu eventuell mit bufferimage was machen kann. leider habe ich auch damit, noch keine erfahrung.

wenn du dich damit auskennst, wäre es nennt wenn du mir kurz einen tip geben könntest.

danke

jopp
jopp ist offline   Mit Zitat antworten
Alt 10.12.2003, 18:12   #4
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Hab' leider von swing&awt wenig ahnung, vielleicht gehts aber so:

Ein image1 erstellen und in dieses Image die Pixel des Graphen hineinkopieren.

Der Code stammt aus einem Delphi Programm, das ich vor ein paar Jahren geschrieben hab (zeichnet die Mandelbrotmenge).
form1.image1.Canvas.copyrect(form1.ClientRect, form1.Canvas, form1.ClientRect); //Speicherung des Ergebnissbildes in Image1

Das Problem schaut ganz allgemein so aus, als ob er die Cursorposition "mitverschiebt"-vielleicht kannst du es also auch durch speichern der Cursorposition lösen.

Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 10.12.2003, 22:26   #5
jopp
Veteran
 
Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266


Standard

danke für deine antwort

das mit dem bild habe ich mir auch schon überlegt. da ich das mit dem scrollen auch von einem programm mit einem bild habe sollte das auf jeden fall funktionieren. einziges problem ist, dass ich keinen schimmer von bilderstellung mit java habe.

werde mich mal schlau darüber machen und versuchen ein kleines test programm zu schreiben. auf jeden fall danke.

jopp
jopp ist offline   Mit Zitat antworten
Alt 11.12.2003, 16:34   #6
jopp
Veteran
 
Registriert seit: 04.12.2001
Alter: 46
Beiträge: 266


Standard

problem gelöst

statt paint(Graphics g) einfach paintComponent(Graphics g) verwenden. und dann noch einmal super.paintComponent(g) aufrufen. damit funktioniert das ganze einwandfrei.

warum? keine ahnung, ich habe irgendwo gelesen, das es besser ist die paintComponent methode zu verwenden. da die paint methode eigetnlich für awt ist und unter swing alles mögliche zusätzlich macht oder so.

aber wurscht, es funktioiert. warum und weßhalb, damit kann man sich ja später auch noch beschäftigen.

danke für die hilfe

jopp
jopp ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:55 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag