zeichnen im scrollbaren Fenster ; Kontrolle von der Kmndo-Z.

Status
Nicht offen für weitere Antworten.

karl0

Mitglied
Hallo Zusammen,


Zunächst vorweg: Ich habe diese Frage auch im folgenden Forum bisher ohne Antwort gestellt. Ich editiere die Frage dort und sage, daß ich die Frage auch hier gestellt habe.

Ich habe mir den Programmcode von diesem Java-Tutorial genommen und versucht ihn so zu verändern, daß die bunten Kreise nicht mehr beim Klicken mit der Maus gezeichnet werden, sondern wenn ich mit der Maus an eine freie Stelle des Fensters zeige und dann auf die SPACE-Taste drücke. Das funktioniert auch soweit, allerdings reagiert das Fenster nicht mehr auf das Drücken der SPACE-Taste, wenn ich das Fenster einmal verlasse und es dann wieder aktiviere.

Weiß außerdem jemand, wie ich den Inhalt des Fensters durch die Eingabe von Zeichenketten auf der Kommandozeile verändern kann? Z.B. will ich, daß der Name, den ich auf der Kommandozeile eingebe "sofort" (also: so schnell wie möglich) auf der weißen Fensteroberfläche angezeigt wird. Wäre Klasse, wenn mir da jemand einen Ansatz geben könnte. Ich weiß da leider nicht weiter. :(


Vielen Dank schonmal für eure Hilfe!



Viele Grüße
Karl


Code:
package components;
 
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.Action;
import javax.swing.AbstractAction;
import javax.swing.KeyStroke;
 
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.PointerInfo;
import java.awt.MouseInfo;
 
import java.awt.event.ActionEvent;
//import java.awt.event.KeyListener;
//import java.awt.event.KeyEvent;
 
import java.util.Vector;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class ScrollDemo2 extends JPanel {
    private static Dimension area; //indicates area taken up by graphics
    private static Vector<Rectangle> circles; //coordinates used to draw graphics
    private static JPanel drawingPane;
 
    private final Color colors[] = {
        Color.red, Color.blue, Color.green, Color.orange,
        Color.cyan, Color.magenta, Color.darkGray, Color.yellow};
    private final int color_n = colors.length;
 
    public ScrollDemo2() {
        super(new BorderLayout());
 
        area = new Dimension(0,0);
        circles = new Vector<Rectangle>();
 
        //Set up the drawing area.
        drawingPane = new DrawingPane();
	drawingPane.setFocusable(true);
        drawingPane.setBackground(Color.white);
 
        //Put the drawing area in a scroll pane.
        JScrollPane scroller = new JScrollPane(drawingPane);
	scroller.setFocusable(true);
        scroller.setPreferredSize(new Dimension(200,200));
 
        //Lay out this demo.
        add(scroller, BorderLayout.CENTER);
    }
 
 
    public class StatusBar extends JLabel {
    
	/** Creates a new instance of StatusBar */
	public StatusBar() {
	    super();
	    super.setPreferredSize(new Dimension(100, 16));
	    setMessage("Ready");
	}
    
	public void setMessage(String message) {
	    setText(" "+message);        
	}        
    }  
 
 
 
    /** The component inside the scroll pane. */
    public class DrawingPane extends JPanel {
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
 
            Rectangle rect;
            for (int i = 0; i < circles.size(); i++) {
                rect = circles.elementAt(i);
                g.setColor(colors[(i % color_n)]);
                g.fillOval(rect.x, rect.y, rect.width, rect.height);
            }
        }
    }
 
 
     /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
Action spaceaction = new AbstractAction() {
    public void actionPerformed(ActionEvent e)
{
	final int W = 100;
	final int H = 100;
	boolean changed = false;
 
	PointerInfo minfo = MouseInfo.getPointerInfo();
 
	int x = minfo.getLocation().x - W/2;
	int y = minfo.getLocation().y - H/2;
	if (x < 0) x = 0;
	if (y < 0) y = 0;
	Rectangle rect = new Rectangle(x, y, W, H);
	circles.addElement(rect);
	drawingPane.scrollRectToVisible(rect);
 
	int this_width = (x + W + 2);
	if (this_width > area.width) {
	    area.width = this_width; changed=true;
	}
 
	int this_height = (y + H + 2);
	if (this_height > area.height) {
	    area.height = this_height; changed=true;
	}
 
	// 	    if (changed) {
	// 		//Update client's preferred size because
	// 		//the area taken up by the graphics has
	// 		//gotten larger or smaller (if cleared).
	// 		drawingPane.setPreferredSize(area);
 
	// 		//Let the scroll pane know to update itself
	// 		//and its scrollbars.
	// 		drawingPane.revalidate();
	// 	    }
	drawingPane.repaint();
    }
};
 
        //Create and set up the window.
        JFrame frame = new JFrame("ScrollDemo2");
	frame.setFocusable(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        //Create and set up the content pane.
        JComponent newContentPane = new ScrollDemo2();
newContentPane.getInputMap().put(KeyStroke.getKeyStroke("SPACE"),
                            "spaceaction");
newContentPane.getActionMap().put("spaceaction",
                             spaceaction);
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);
 
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
 
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
		public void run() {
		    createAndShowGUI();
		}
	    });
 
	//  prompt the user to enter their name 
	System.out.print("Enter your name: "); 
 
	//  open up standard input 
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
 
	String userName = null; 
 
	//  read the username from the command-line; need to use try/catch with the 
	//  readLine() method 
	try { 
	    userName = br.readLine(); 
	} catch (IOException ioe) { 
	    System.out.println("IO error trying to read your name!"); 
	    System.exit(1); 
	} 
 
	System.out.println("Thanks for the name, " + userName);
    }
}
 

Marco13

Top Contributor
Das ist ein Hack.
Das ist ein Hack.
Das ist ein Hack.

Aber vielleicht verdeutlicht es, wie man grundsätzlich den eingegebenen String ins ScrollDemo2 bringt.

Das mit den Punkten funktioniert bei mir von vornherein nicht. Vielleicht solltest du eher einen KeyListener an die ScrollPane hängen oder so? ???:L


Code:
    // Von [url]http://www.java-forum.org/de/viewtopic.php?t=70754&highlight=[/url]

import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.Action;
import javax.swing.AbstractAction;
import javax.swing.KeyStroke;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.PointerInfo;
import java.awt.MouseInfo;

import java.awt.event.ActionEvent;
//import java.awt.event.KeyListener;
//import java.awt.event.KeyEvent;

import java.util.Vector;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class ScrollDemo2 extends JPanel
{
    private static Dimension area; //indicates area taken up by graphics
    private static Vector<Rectangle> circles; //coordinates used to draw graphics
    private static JPanel drawingPane;

    private final Color colors[] =
                                   {
                                   Color.red, Color.blue, Color.green, Color.orange,
                                   Color.cyan, Color.magenta, Color.darkGray, Color.yellow};
    private final int color_n = colors.length;

    public String theName = "";


    public ScrollDemo2()
    {
        super(new BorderLayout());

        area = new Dimension(0, 0);
        circles = new Vector<Rectangle>();

        //Set up the drawing area.
        drawingPane = new DrawingPane();
        drawingPane.setFocusable(true);
        drawingPane.setBackground(Color.white);

        //Put the drawing area in a scroll pane.
        JScrollPane scroller = new JScrollPane(drawingPane);
        scroller.setFocusable(true);
        scroller.setPreferredSize(new Dimension(200, 200));

        //Lay out this demo.
        add(scroller, BorderLayout.CENTER);
    }


    public class StatusBar extends JLabel
    {

        /** Creates a new instance of StatusBar */
        public StatusBar()
        {
            super();
            super.setPreferredSize(new Dimension(100, 16));
            setMessage("Ready");
        }

        public void setMessage(String message)
        {
            setText(" " + message);
        }
    }


    /** The component inside the scroll pane. */
    public class DrawingPane extends JPanel
    {
        protected void paintComponent(Graphics g)
        {
            super.paintComponent(g);

            Rectangle rect;
            for(int i = 0; i < circles.size(); i++)
            {
                rect = circles.elementAt(i);
                g.setColor(colors[(i % color_n)]);
                g.fillOval(rect.x, rect.y, rect.width, rect.height);
            }
            g.drawString(theName, 100,100);
        }
    }


    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static ScrollDemo2 createAndShowGUI()
    {
        Action spaceaction = new AbstractAction()
        {
            public void actionPerformed(ActionEvent e)
            {
                final int W = 100;
                final int H = 100;
                boolean changed = false;

                PointerInfo minfo = MouseInfo.getPointerInfo();

                int x = minfo.getLocation().x - W / 2;
                int y = minfo.getLocation().y - H / 2;
                if(x < 0)
                    x = 0;
                if(y < 0)
                    y = 0;
                Rectangle rect = new Rectangle(x, y, W, H);
                circles.addElement(rect);
                drawingPane.scrollRectToVisible(rect);

                int this_width = (x + W + 2);
                if(this_width > area.width)
                {
                    area.width = this_width;
                    changed = true;
                }

                int this_height = (y + H + 2);
                if(this_height > area.height)
                {
                    area.height = this_height;
                    changed = true;
                }

                //        if (changed) {
                //       //Update client's preferred size because
                //       //the area taken up by the graphics has
                //       //gotten larger or smaller (if cleared).
                //       drawingPane.setPreferredSize(area);

                //       //Let the scroll pane know to update itself
                //       //and its scrollbars.
                //       drawingPane.revalidate();
                //        }
                drawingPane.repaint();
            }
        };

        //Create and set up the window.
        JFrame frame = new JFrame("ScrollDemo2");
        frame.setFocusable(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        ScrollDemo2 newContentPane = new ScrollDemo2();
        newContentPane.getInputMap().put(KeyStroke.getKeyStroke("SPACE"),
                                         "spaceaction");
        newContentPane.getActionMap().put("spaceaction",
                                          spaceaction);
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        newContentPane.requestFocusInWindow();

        //Display the window.
        frame.pack();
        frame.setVisible(true);

        return newContentPane;
    }

    public static void main(String[] args)
    {

        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.

        final ScrollDemo2 sd[] = new ScrollDemo2[1];

        try
        {
            javax.swing.SwingUtilities.invokeAndWait(new Runnable()
            {
                public void run()
                {
                    sd[0] = createAndShowGUI();
                }
            });
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        //  prompt the user to enter their name
        System.out.print("Enter your name: ");

        //  open up standard input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String userName = null;

        //  read the username from the command-line; need to use try/catch with the
        //  readLine() method
        try
        {
            userName = br.readLine();
        }
        catch(IOException ioe)
        {
            System.out.println("IO error trying to read your name!");
            System.exit(1);
        }

        sd[0].theName = userName;
        sd[0].repaint();

        System.out.println("Thanks for the name, " + userName);
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
Helgon Swing Mit Swing zeichnen / NetBeans GUI AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
4 Swing Graphen selber zeichnen AWT, Swing, JavaFX & SWT 2
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
T Zeichnen von getSubimage funktioniert nicht AWT, Swing, JavaFX & SWT 7
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
N JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
D Zeichnen eines Barplots AWT, Swing, JavaFX & SWT 2
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
C Funktionen zeichnen AWT, Swing, JavaFX & SWT 16
P JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T Oval auf ein JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L Zeichnen in zwei Fenstern AWT, Swing, JavaFX & SWT 8
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
S Bild von Punkt zu Punkt zeichnen AWT, Swing, JavaFX & SWT 8
U Pixel zeichnen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben