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
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);
}
}