# Programm mit Elementen aus High-Level API und Low-Level API



## rumkugeln (16. Jun 2009)

Ich möchte ein Programm schreiben, bei dem sich im oberen Teil des Bildschirms eine Linie bewegt und im unteren Teil des Bildschirmes soll man auswählen können wie schnell sich die Linie bewegt. Dazu möchte ich ein Textfeld nutzen. Nun hab ich in meinem Programmierbuch gelesen, das eine Vermischung von High-Level und Low-Level API nicht möglich ist. 
Wie kann ich das dennoch realisieren?


----------



## Marco13 (16. Jun 2009)

Bei dem Gedanken, dass du "High"- und "Low"-Level auf die "hohe" und "niedrige" Position auf dem Bildschirm beziehst, könnt' ich mich .... rumkugeln :lol:

Ne, beschreib' mal genauer, was du meinst


----------



## rumkugeln (16. Jun 2009)

Wie kannst du es wagen dich über meinen Nicknamen lustig zu machen???  Scherz!

Also was ich unter High-Level API verstehe sind Oberflächenelemente wie Textfelder und diese Radio-Buttons usw.
Low Level APi Elemente soviel ich weiß z.B einfache Linien und Rechtecke usw. 

Und ich möchte ein Programm schreiben, wo auf dem Bildschirm eine einfache Linie zu sehen ist und ein Textfeld.


----------



## Schandro (16. Jun 2009)

dumdideldei... meinste sowas?

```
public class XXX{

    public static void main(String[] args){
        new XXX();}


    private JFrame window;
    private JPanel panel;
    private JTextField inputField;
    private int cnt; // wird zur Kommunikation ziwschen dem animationThread und paintComponent benutzt

    public XXX(){
    	window = new JFrame();
        window.setBounds(100,100,400,200);

        panel = new JPanel();
        window.add(panel);

        panel.setLayout(new BorderLayout());


        panel.add(drawPanel,BorderLayout.CENTER);

        inputField = new JTextField("5");
        panel.add(inputField,BorderLayout.SOUTH);




        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
        });

        Thread animationThread = new Thread(new Runnable(){
            public void run(){
                while(true){

                    try{
						cnt += Integer.parseInt(inputField.getText());
						inputField.setForeground(Color.BLACK);
					}
					catch(NumberFormatException e){
						inputField.setForeground(Color.RED);
						// Benutzer sieht außerdem das sich nix bewegt...
					}


                    drawPanel.repaint();

					if(cnt > panel.getSize().width){
						cnt = 0;
					}

                    try{
                        Thread.sleep(10);
                    }catch(InterruptedException e){
                        e.printStackTrace();
                    }
                }
            }
        });
        animationThread.start();
    }


    private JPanel drawPanel = new JPanel(){
        public void paintComponent(Graphics g){
            super.paintComponent(g);

            g.setColor(Color.BLACK);
            g.fillRect(cnt,50,50,50);
        }
    };

}
```


----------



## Marco13 (16. Jun 2009)

Jo kein Problem eigentlich

```
// Panel das eine Linie malt
class LinePanel extends JPanel
{
    private Point p0 = new Point(); // Setter hierfür anbieten
    private Point p1 = new Point();

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        // Linien oder sonstwas malen
        g.drawLine(p0.x, p0.y, p1.x, p1.y);
    }
}

class Main extends JFrame
{
    private LinePanel linePanel;

    public Main()
    {
        getContentPane().setLayout(new BorderLayout());

        // Hauptbereich: Das LinePanel
        linePanel = new LinePanel();
        getContentPane().add(linePanel, BorderLayout.CENTER);

        // Unten ein Button
        JButton someButton = new JButton("...");
        getContentPane().add(someButton, BorderLayout.SOUTH);

    }

}
```


Siehe auch Trail: Creating a GUI with JFC/Swing (The Java™ Tutorials)


----------



## Marco13 (16. Jun 2009)

@Schandro: Wenn ich mal Zeit habe (... ha ...) mache ich mal einen FAQ- oder Blog-Eintrag mit den "Stubs" für diese immer wiederkehrenden Probleme:
1. Einfach irgendwas Zeichnen (z.B. ein Image)
2. Etwas animiert Zeichnen
3. Etwas anklickbar Zeichnen
Dann kann man in Zukunft immer verlinkten - deine XXX-Klasse taucht hier inzwischen SO auf auf, dass die ganzen armen Leute auf der verzweifelten Suche nach Pornos immer auf java-forum.org landen


----------



## rumkugeln (16. Jun 2009)

Ja das meine ich. Aber... bin ich falsch informiert oder habt ihr da in J2SE geschrieben? Das nüzt mir ja nix, der Beitrag hier ist nämlich im J2ME Unterforum. Oder geht das da auch?


----------



## Schandro (16. Jun 2009)

> deine XXX-Klasse taucht hier inzwischen SO auf auf, dass die ganzen armen Leute auf der verzweifelten Suche nach Pornos immer auf java-forum.org landen


jetzt musste ich mich rumkugeln:lol:^^

Ja, so ein Blog/FAQ Eintrag wär echt was gutes. Ist nur die Frage, ob dort lieber ein javax.swing.Timer statt dem Thread benutzt werden sollte. Gibt ja unterschiedliche Meinungen dazu. Ich persönlich find Thread besser, da es imho für Anfänger verständlicher ist und dazu anregt sich mal in das wichtige Thema Multithreading reinzulesen.



> Das nüzt mir ja nix, der Beitrag hier ist nämlich im J2ME Unterforum


tschuldigung, nicht gesehen, hab nur die "Neue Beiträge auflisten" Funktion benutzt und deswegen nicht auf das Unterforum geachtet.


----------



## rumkugeln (17. Jun 2009)

Also ich möchte ja niemanden drängen, aber ich stehe etwas unter Zeitdruck...
Also wenn ihr mir weiterhelfen könnt, wäre ich euch sehr verbunden!


----------



## ice-breaker (19. Jun 2009)

Aber gerne doch:
Nein High- und LowLevel-API sind *nicht* mischbar, deine Textfelder musst du selbst mit der LowLevel-API programmieren.
Es gibt da einige Libraries, die HighLevel-Komponenten mit der LowLevel-API implementieren, diese stehen aber unter der GPL oder sind verdammt teuer, und ob du damit realisieren kannst, was du möchtest, kann ich dir auch nicht sagen.


----------



## rumkugeln (20. Jun 2009)

Also, ich hab jetzt herausgefunden, das man das auch mit JME Polish machen könnte, aber das ist zu umständlich. Ich werde einfach den grafischen Anteil auf ne andere Form bringen.


----------



## oldshoe (26. Jun 2009)

irgendwie kann ich mir nicht so richtig vorstellen, was du machen möchtest...
kannst du vielleicht mit einem Grafikprogramm was zurechtschieben, um zu verdeutlichen wie es später aussehen soll?


----------

