Rectangle Border Color

S

Simbasi

Gast
Guten Abend,

ich habe ein kleines Problemchen mit der Klasse Rectangle.

Ich habe ein Diagramm mit vielen verschiedenen Graphen. Sobald der Benutzer auf das Diagramm mit der Maus klickt, kann er sich einen Bereich auswählen um dort eine Zoom-Auswahl zu treffen.
Diese Zoom-Auswahl stelle ich zur Zeit mithilfe eines Rectangles dar, welches nicht über paintComponent gezeichnet wird, sondern über eine eigene Methode in Zusammenhand mit MouseActionListener's.
Also zum Beginn wird im Konstruktor einfach ein neues Rectangle Object angelegt mit "rect_zoom = new Rectangle();" und je nachdem was der Benutzer macht, wird dies einer Position/Grösse angepasst.

Nun das Problem:

Ich habe einen weissen Hintergrund und der Rahmen des Rectangles ist ebenfalls weiss. Nun das ist ein wenig supoptimal, da der Benutzer nun selbst nicht weiss was er genau macht!

Gibt es also eine Möglichkeit die RahmenFarbe des Rectangles vorab zu verändern?

Liebe Grüße und noch einen schönen Abend wünscht

Simbasi :*
 

TKausL

Top Contributor
Das kommt drauf an wie das Rectangle gezeichnet wird. Das Rectangle-Object an sich tut erstmal nicht. Es stellt nur ein Rechteck dar, indem es eine Position X/Y und eine Größe width/height bereitstellt.
 
S

Simbasi

Gast
Gezeichnet wirds bei mir mit setBounds(x,y,width, height); Aber wie gesagt, beim zeichnen an sich liegt nicht das Problem. Eher die Farbe des Rahmes.
 
S

Simbasi

Gast
Hey,

zu 1. Hmm ok, hast recht.. setBounds setzt ja nur die Größe welche das Zeichnen brauch um es überhaupt zeichnen zu können. Entschuldige

zu 2. Danke, das wusste ich echt noch nicht. Habe gedacht das Rectangle wäre einfach ein Rechteck :)

Nun, gibt es denn die Möglichkeit die Farbe des Rectangles zu verändern?
 

dayaftereh

Top Contributor
Ist die Klasse [JAPI]Rectangle[/JAPI] aus der Java API oder wurde die selbst hinzugefügt. Kannst du mal den Import von Rectangle posten? Weil die Klasse Rectangle hat in der 5.0 API kein draw?
 
S

Simbasi

Gast
Hey,

viele scheinen wohl nicht zu wissen wie ich das meine, oder ich habe das mit dem Graphic einfach falsch verstanden. Für mich ist das so:

Wenn ich mit Graphic zeichne, zeichne ich das Rectangle über die paintComponent Methode vom JPanel, aber ich lege mir ein Object an und sobald es gebraucht wird (Beim 1. Klick) wird es auf die momentane Position mit Größe der aktuellen Mausposition mit setBounds gesetzt und ein repaint() aufgerufen.

Ich poste einfach mal meine Klasse:

Java:
package multidiagramm;

import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;

public class GraphZoom extends JPanel
{
    private boolean click;

    private Rectangle rect_zoom;

    private int mouse_x_start = 0;
    private int mouse_y_start = 0;
    
    private int mouse_x_end = 0;
    private int mouse_y_end = 0;
    
    Thread thread_resize;

    public GraphZoom()
    {
        this.click = false;
        
        this.rect_zoom = new Rectangle();
        
        

        this.addMouseListener(new MouseListener() 
        {

            @Override
            public void mouseClicked(MouseEvent e) {
                
                if (getMouseClick())
                {
                    setMouseClick(false);
                    
                    return;
                }
                setMouseClick(true);
                mouse_x_start = e.getX();
                mouse_y_start = e.getY();
            }

            @Override
            public void mousePressed(MouseEvent e) 
            {
            }

            @Override
            public void mouseReleased(MouseEvent e) 
            {
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                
            }

            @Override
            public void mouseExited(MouseEvent e) {
               
            }
        });
        
        this.addMouseMotionListener(new MouseMotionAdapter() 
        {

            @Override
            public void mouseMoved(MouseEvent e) 
            {
                if (getMouseClick())
                {
                    mouse_x_end = e.getX();
                    mouse_y_end = e.getY();
                    if (thread_resize == null)
                    {
                        createZoomAreaThread();
                    }
                    
                    if (!thread_resize.isAlive())
                    {
                        createZoomAreaThread();
                        thread_resize.start();
                    }
                }
            }
        });

    }
    
    private void setMouseClick(boolean clicked)
    {
        this.click = clicked;
    }
    
    private boolean getMouseClick()
    {
        return this.click;
    }
    
    private void editZoomArea()
    {
        int x = 0;
        int y = 0;
        int width = 0;
        int height = 0;
        
        if (mouse_x_start < mouse_x_end)
        {
            x = mouse_x_start;
            width = mouse_x_end - mouse_x_start;
        }
        else if (mouse_x_start > mouse_x_end)
        {
            x = mouse_x_end;
            width =  mouse_x_start - mouse_x_end;
        }
        
        if (mouse_y_start < mouse_y_end)
        {
            y = mouse_y_start;
            height = mouse_y_end - mouse_y_start;
        }
        else if (mouse_y_start > mouse_y_end)
        {
            y = mouse_y_end;
            height = mouse_y_start - mouse_y_end;
        }
            
        this.rect_zoom.setBounds(x, y, width, height);
        
        this.repaint();
    }

    public Rectangle getZoomRect()
    {
        return this.rect_zoom;
    }
    
    
    private void createZoomAreaThread()
    {
        thread_resize = new Thread(new Runnable() 
        {

            @Override
            public void run() 
            {
                while(getMouseClick())
                {
                    try 
                    {
                        thread_resize.sleep(50);
                    } 
                    catch (InterruptedException ex) 
                    {
                    }
                    
                    editZoomArea();
                    
                }
                
            }
        });
    }
    
}
 
S

Simbasi

Gast
1. Nein, dort gibt es keine überschriebene paintComponent Methode. Das ist die komplette Klasse so wie sie ist. Wenn ich mir nun ein Panel erstelle und von der Klasse erbe passiert folgendes:

Der erste Klick auf das Fenster zeigt mit das Rectangle an und wie ich die Maus bewege so wird es mir dargestellt, mein 2. Klick wird der Thread gestoppt und das Rectangle bleibt auf der Größe wie es zuletzt war auf dem Fenster stehen.

2. Welcher 2. Thread? Da ist nur einer, ich muss ihn nur immer wieder erneut anlegen nachdem dieser "ausgelaufen" ist. Wenn ich also ein neues Rectangle haben möchte, muss der Thread neu erstellt werden, da diese nicht mehr erneut zu starten sind, nachdem diese einmal komplett durchgelaufen sind (Habe es vorher anders probiert, aber das ging nicht!).

Hättet ihr das anders gemacht? Gehe ich vielleicht den komplett falschen Weg?

Also das Rectangles soll wie der Klassenname schon sagt zum Zoomen eines Graphen sein. Man kann im Graphenfenster beliebig klicken, anhand der Punkte des Rectangles wird der Bereich berechnet und das ganze "gezoomt" :)

P.S.: Ich glaube ich erstelle mir dann doch beim nächsten mal einen Account hier im Forum :)

Liebe Grüße Simbasi
 

Michael...

Top Contributor
1. Nein, dort gibt es keine überschriebene paintComponent Methode. Das ist die komplette Klasse so wie sie ist. Wenn ich mir nun ein Panel erstelle und von der Klasse erbe passiert folgendes:
Du hast eine Klasse die von GraphZoom erbt und hier ist die überschriebene paintComponent?
Der erste Klick auf das Fenster zeigt mit das Rectangle an und wie ich die Maus bewege so wird es mir dargestellt, mein 2. Klick wird der Thread gestoppt und das Rectangle bleibt auf der Größe wie es zuletzt war auf dem Fenster stehen.
Der Thread ist hier eigentlich überflüssig. Beim ersten Klick merkst Du Dir die Mausposition und dann "verfolgst" Du einfach per MouseMotionListener die Maus und aktualisierst die zweite Ecke immer auf die aktuelle Position der Maus.

Aber egal, da wo letztendlich das Rectangle gezeichnet wird musst Du eben zuerst die Farbe des Graphics Objekts ändern, wenn der Rahmen in einer bestimmten Farbe gezeichnet werden soll.

Du benutzt nicht etwa BlueJ oder ähnliches?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was genau bewirkt Rectangle in 2dGraphics? AWT, Swing, JavaFX & SWT 1
R AWT Rectangle mit Angle AWT, Swing, JavaFX & SWT 10
K 2048 Umsetzung mit Gridpane / Stackpane und / Rectangle AWT, Swing, JavaFX & SWT 0
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
U JavaFX GridPane - Circle auf Rectangle versetzten AWT, Swing, JavaFX & SWT 1
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
L JavaFX Rectangle mit Dock-Mechanismus AWT, Swing, JavaFX & SWT 3
K JavaFX TableView mit Rectangle AWT, Swing, JavaFX & SWT 3
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
J Rectangle g.fillRec() X/Y Punkt AWT, Swing, JavaFX & SWT 5
TheSorm Rectangle drehen AWT, Swing, JavaFX & SWT 9
P drawString in einem Rectangle AWT, Swing, JavaFX & SWT 4
P Rectangle verschieben AWT, Swing, JavaFX & SWT 11
P ImageIcon auf Rectangle AWT, Swing, JavaFX & SWT 3
P Rectangle on JPanel zentrieren AWT, Swing, JavaFX & SWT 20
O 2D-Grafik Rectangle mit double Werten zeichnen AWT, Swing, JavaFX & SWT 3
T Rectangle Namen geben? Alternativen auch gerne gesehen. AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Form der GrafikObjekte ändern, Ellipse -> Rectangle AWT, Swing, JavaFX & SWT 2
K AWT Rectangle klappt nicht AWT, Swing, JavaFX & SWT 7
R Resize Rectangle Problem AWT, Swing, JavaFX & SWT 3
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
I Text innerhalb von Rectangle rendern AWT, Swing, JavaFX & SWT 3
H Rectangle[] ? AWT, Swing, JavaFX & SWT 5
I Rectangle mit floating values AWT, Swing, JavaFX & SWT 2
D Markieren mit Rectangle ? AWT, Swing, JavaFX & SWT 9
T PLAF MetalButtonUI Rectangle beseitigen AWT, Swing, JavaFX & SWT 4
K JavaFX CSS Border (Verschiebung verhindern) AWT, Swing, JavaFX & SWT 4
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
MaxG. JavaFX JavaFX Border zuweisen AWT, Swing, JavaFX & SWT 8
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
J JFrame border AWT, Swing, JavaFX & SWT 2
V Swing JButton ohne Border bei Anklicken AWT, Swing, JavaFX & SWT 3
C Border in JPanel erstellen AWT, Swing, JavaFX & SWT 4
eskimo328 Dashed Border in JRE 7 funktioniert nicht AWT, Swing, JavaFX & SWT 3
Kenan89 Border nimmt Platz AWT, Swing, JavaFX & SWT 17
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
B Border anzeigen/nicht anzeigen AWT, Swing, JavaFX & SWT 6
G Swing JTabbedPane Was für ein Border wird da um die Tabs gezeichnet? AWT, Swing, JavaFX & SWT 6
G Etched Border nur an einer Seite einfügen AWT, Swing, JavaFX & SWT 16
P Swing Größe eines JPanels bestimmen (ohne Border!) AWT, Swing, JavaFX & SWT 2
F Swing UI Problem mit Zeichnen der Tab-Border AWT, Swing, JavaFX & SWT 2
N JButton Border(null) AWT, Swing, JavaFX & SWT 3
A SWT - group - border color? AWT, Swing, JavaFX & SWT 4
S Border von JTabbedpane-Tab? AWT, Swing, JavaFX & SWT 3
K SWT Titeld Border AWT, Swing, JavaFX & SWT 3
H JList: Selection-Border entfernen AWT, Swing, JavaFX & SWT 2
Streeber Menüpunkt - Border/Strich AWT, Swing, JavaFX & SWT 2
A Titled Border nur oben? AWT, Swing, JavaFX & SWT 3
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
T Font mit Border AWT, Swing, JavaFX & SWT 7
T Border eines Panels nicht an der rechten Kante anzeigen AWT, Swing, JavaFX & SWT 7
T paintComponent() überschreiben: Platz für Border freihalten? AWT, Swing, JavaFX & SWT 6
C menubar border AWT, Swing, JavaFX & SWT 2
X Einzelne Border setzen AWT, Swing, JavaFX & SWT 2
J Border bei JSplitPane entfernen? AWT, Swing, JavaFX & SWT 2
K Border von JTextField AWT, Swing, JavaFX & SWT 1
M JWindow mit Rahmen(border) ausstatten AWT, Swing, JavaFX & SWT 4
G JPanel und Border AWT, Swing, JavaFX & SWT 16
C SWT Composite Border im Nachhinein setzen AWT, Swing, JavaFX & SWT 1
M Border in ToolTip AWT, Swing, JavaFX & SWT 5
E JButton und Border AWT, Swing, JavaFX & SWT 6
J Border im Header bei JTable verändern AWT, Swing, JavaFX & SWT 3
Z Border um ein JPanel AWT, Swing, JavaFX & SWT 3
W Probleme mit Border- und null-Layout AWT, Swing, JavaFX & SWT 8
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
C JToggleButton disabled Text Color AWT, Swing, JavaFX & SWT 11
D JUNG change color of an spceific AWT, Swing, JavaFX & SWT 4
R AWT Color von Point AWT, Swing, JavaFX & SWT 1
C JCheckBox disabled text color AWT, Swing, JavaFX & SWT 9
K Color-Objekt erzeugen in CMYK AWT, Swing, JavaFX & SWT 2
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
E To get a color text on the TextArea AWT, Swing, JavaFX & SWT 4
E To get color text on the TextArea AWT, Swing, JavaFX & SWT 5
J JSlider Color Ticks AWT, Swing, JavaFX & SWT 1
Seikuassi SWING - (Hoffentlicher) simpler Color-Fehler AWT, Swing, JavaFX & SWT 4
F java.awt.Color AWT, Swing, JavaFX & SWT 8
K AWT Welche color benutzen? AWT, Swing, JavaFX & SWT 4
Y Globale Font-Color definieren AWT, Swing, JavaFX & SWT 5
J AWT setBackground(Color.orange) ist unter Win7 Aero nicht orange AWT, Swing, JavaFX & SWT 3
B Color String Code AWT, Swing, JavaFX & SWT 3
C Swing Button color transparent AWT, Swing, JavaFX & SWT 4
B Color.BLUE in String umwandeln AWT, Swing, JavaFX & SWT 4
W Verschiedene Foreground color in Combo SWT Auswahlliste AWT, Swing, JavaFX & SWT 5
lumo SWT Table Selection Color +Focus Out AWT, Swing, JavaFX & SWT 14
Developer_X Die Transparente Color AWT, Swing, JavaFX & SWT 8
V SWT Color Problem AWT, Swing, JavaFX & SWT 2
S Color in Cell AWT, Swing, JavaFX & SWT 2
O JTabbedPane - Selected Color? AWT, Swing, JavaFX & SWT 1
X JButton color change AWT, Swing, JavaFX & SWT 2
G Color AWT, Swing, JavaFX & SWT 5
S noobfrage: background color wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
M setColor mit Fehler cannot fiend symbol (java.awt.Color) AWT, Swing, JavaFX & SWT 2
R SWT color Objekt AWT, Swing, JavaFX & SWT 4
L setBorder(BorderFactory.createLineBorder(Color,2) AWT, Swing, JavaFX & SWT 4
T Background Color JSpiner AWT, Swing, JavaFX & SWT 2
D ComboBox mit Farben aus java.awt.color AWT, Swing, JavaFX & SWT 4
L Farbregler - Werte als Zahl ausgeben - Color AWT, Swing, JavaFX & SWT 5
S java.awt.color Schriftfarbe AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben