paint-Methode überschreiben

Status
Nicht offen für weitere Antworten.

Cheefrocker

Bekanntes Mitglied
Hallo zusammen,

ich habe folgendes Problem ich habe ein eigene Border-Klasse geschrieben. wenn ich diesen Border um eine Komponente wie z.b JPanel lege klappt alles einwandfrei. Wenn ich aber auf das Panel andere Komponenten lege werden diese komisch angezeigt.

so sollte es nicht aussehen wird es aber angezeigt:

320x240nicht.jpg



so sollte es eigentlich aussehen:


320x240soll.jpg



das Komisch ist. zuerst wird so angezeigt wie das erste bild. geh ich dann über die komponenten dann wird es wie unten normal angezeigt.

Was muss ich machen damit das richtig angezeigt wird??? Muss man irgentwie repaint oder ähnliches beim Border machen, oder beim Panel welches dann den Border kriegt?


hier noch meine Borderklasse:

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Border;


import java.awt.BasicStroke;
import java.awt.Color;


import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import javax.swing.border.AbstractBorder;

public class HorizontalDashedBorder extends AbstractBorder {

    protected Color lineColor;

    public HorizontalDashedBorder() {
        lineColor = Color.DARK_GRAY;
    }

    public Insets getBorderInsets(Component c) {
        return new Insets(1, 1, 1, 1);
    }

    public boolean isBorderOpaque() {
        return false;
    }

    public void paintBorder(Component c, Graphics g, int x, int y, int width,
            int height) {
        Color oldColor = g.getColor();
        g.setColor(lineColor);
        ((Graphics2D) g).setStroke(new BasicStroke(1, 0, 0, 1, new float[]{3f, 3f}, 0));

        int i = 0;//Abstand nach innen.

       // g.drawRect(x + i, y + i, width - i - i - 1, height - i - i - 1);//Rechteck kommplette Umrandung
           g.drawLine(x, y, width,0);//horizontalline oben
        //g.drawLine(0, 0, 0,height);//Verticalline
           g.drawLine(0, height-1, width,height-1);//horizontalline unten
        //   System.out.println(x);
        //    System.out.println(y);
        //    System.out.println(width);
        //   System.out.println(height);
        g.setColor(oldColor);
    //links 
    //    for(int i = y; (i + 10) <= height; i+=20){ 
    //       g.drawLine(x, i, x, i+length);          
    //    } 

    //rechts 
    //    for(int i = y; (i + 10) <= height; i+=20){ 
    //       g.drawLine(width - 1, i, width - 1, i+length);          
    //    } 
        re
    }
}

vielleicht kann jemand helfen. danke im voraus.
 
G

Guest

Gast
schwer zu sagen... wie rufest du es auf??? mach kleines programm...
 

Cheefrocker

Bekanntes Mitglied
ich hab jPanel der mit setBorder(new HorizontalDashedBorder ()); den Border kriegt.

aus diesem jPanel habe ich eine Bean-Komponente gemacht die ich dann in einer IDE verwende.

auf dem Panel plaziere weitere Beans(selbsterstelle jPanels) mit addComponent....

das wars eigentlich.
 

Cheefrocker

Bekanntes Mitglied
Code:
package javaapplication1;

import Border.HorizontalDashedBorder;
import gui.Content_Subnavigator;
import gui.Content_Subnavigator_Button;
import javax.swing.JFrame;


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame n = new JFrame();
        n.setSize(500, 300);
        
        //Panel auf dem weitere Panels plaziert sind. 
        Content_Subnavigator panel = new Content_Subnavigator();
        
        //Border setzen
        panel.setBorder(new HorizontalDashedBorder());
        
        // dem panel weitere komponenten einfügen. 
        Content_Subnavigator_Button button = new  Content_Subnavigator_Button();
        Content_Subnavigator_Button button2 = new Content_Subnavigator_Button();
        panel.add(button);
        panel.add(button2);
        
        
        //Panel adden
        n.add(panel);
        
        
        n.setVisible(true);
        
    }

}
 

Cheefrocker

Bekanntes Mitglied
Oder kann es damit zusammen hängen das ich falsch von jPanel abgeleitet habe und er deshalb nicht richtig reagiert?
Code:
public class Content_Subnavigator extends JPanel {

    /** Creates new form BeanForm */
    public Content_Subnavigator() {
    super();
    }
....
}
 

Cheefrocker

Bekanntes Mitglied
mir ist auch aufgefallen das wenn ich in der beispielanwendung resize dann krieg ich das erste bild. wenn ich die das panel kliege als auf die komponenten dann wird es ordentlich gezeichnet.
 

Cheefrocker

Bekanntes Mitglied
Content_Subnavigator

Code:
/*
 * Content_Subnavigator.java
 *
 * Created on 14. August 2008, 11:48
 */

package gui;

import javax.swing.JPanel;

/**
 *
 *
 */
public class Content_Subnavigator extends JPanel {

    /** Creates new form BeanForm */
    public Content_Subnavigator() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setBackground(new java.awt.Color(153, 153, 255));
        setBorder(new HorizontalDashedBorder());
    }// </editor-fold>


    // Variables declaration - do not modify
    // End of variables declaration

}
 

Cheefrocker

Bekanntes Mitglied
Content_Subnavigation_Button
Code:
/*
 * Content_Subnavigation_Button.java
 *
 * 
 */

package gui;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import javax.swing.JPanel;

/**
 *
 *  */
public class Content_Subnavigator_Button extends JPanel {

    /** Creates new form BeanForm */
    public Content_Subnavigator_Button() {
        initComponents();
        setCursor (new Cursor (Cursor.HAND_CURSOR));
       
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        Button1 = new gui.Button();
        jLabel1 = new javax.swing.JLabel();

        setBackground(new java.awt.Color(192, 206, 216));
        setMaximumSize(new java.awt.Dimension(200, 20));
        setMinimumSize(new java.awt.Dimension(200, 17));
        setPreferredSize(new java.awt.Dimension(200, 17));
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                formMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                formMouseExited(evt);
            }
        });
        setLayout(null);

        Button1.setBackground(new java.awt.Color(98, 121, 139));
        Button1.setAlignmentY(0.0F);
        add(Button1);
        Button1.setBounds(5, 5, 10, 10);

        jLabel1.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        jLabel1.setText("null null");
        add(jLabel1);
        jLabel1.setBounds(30, -1, 150, 20);
    }// </editor-fold>                        

private void formMouseEntered(java.awt.event.MouseEvent evt) {                                  
// TODO add your handling code here:#
   jLabel1.setFont( new Font( "Verdana", Font.BOLD, 11));
   Button1.setBackground(Color.YELLOW);
}                                 

private void formMouseExited(java.awt.event.MouseEvent evt) {                                 
// TODO add your handling code here:
   jLabel1.setFont( new Font( "Verdana", Font.PLAIN, 11 ));
   Button1.setBackground(Color.GRAY);
}                                


    // Variables declaration - do not modify                     
    private gui.Button Button1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   

    
     public void setSubnavigatorButtonText(String Name)
     {
        jLabel1.setText(Name);
     }
     

}
 
G

Gast2

Gast
variablen werden klein geschrieben....

du musst noch einfügen
Button1.setBorder(null);

in deinem initComponents...

aber ich versteh nicht warum du nicht einfach von JButton erbst ...
aber egal wenn du des einfügst dann passt es
 

Cheefrocker

Bekanntes Mitglied
kann ich setborder in den subnavigator panel bzw in subnavigator_button setzen?

ich will ihn nicht immer beim aufruf im Frame setzen müssen.

wenn ich das hier mache funzt es auch nicht:

Code:
        Content_Subnavigator_Button button = new Content_Subnavigator_Button();
        Content_Subnavigator_Button button2 = new Content_Subnavigator_Button();

        button.setBorder(null);
        button2.setBorder(null);
 
G

Gast2

Gast
in deinem initComponents...........

Code:
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JPanel;

/**
*
*  */
public class Content_Subnavigator_Button extends JPanel {

    /** Creates new form BeanForm */
    public Content_Subnavigator_Button() {
        initComponents();
        setCursor (new Cursor (Cursor.HAND_CURSOR));

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */

    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        Button1 = new JButton();
        jLabel1 = new javax.swing.JLabel();
        Button1.setBorder(null);
        setBackground(new java.awt.Color(192, 206, 216));
        setMaximumSize(new java.awt.Dimension(200, 20));
        setMinimumSize(new java.awt.Dimension(200, 17));
        setPreferredSize(new java.awt.Dimension(200, 17));
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                formMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                formMouseExited(evt);
            }
        });
        setLayout(null);

        Button1.setBackground(new java.awt.Color(98, 121, 139));
        Button1.setAlignmentY(0.0F);
        add(Button1);
        Button1.setBounds(5, 5, 10, 10);

        jLabel1.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        jLabel1.setText("null null");
        add(jLabel1);
        jLabel1.setBounds(30, -1, 150, 20);
    }// </editor-fold>

private void formMouseEntered(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:#
   jLabel1.setFont( new Font( "Verdana", Font.BOLD, 11));
   Button1.setBackground(Color.YELLOW);
}

private void formMouseExited(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
   jLabel1.setFont( new Font( "Verdana", Font.PLAIN, 11 ));
   Button1.setBackground(Color.GRAY);
}


    // Variables declaration - do not modify
    private JButton Button1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration


     public void setSubnavigatorButtonText(String Name)
     {
        jLabel1.setText(Name);
     }
}
 

Cheefrocker

Bekanntes Mitglied
ja das ist mir schon klar :) aber ich leite von Jpanel ab, dachte davon den Border auf null.

aber kann ich ihm nicht einen individuellen border noch verpassen dem Button??? z.b BevelBorder
 
G

Gast2

Gast
ich weiß nicht ob er den Border von dem übergeordneten Komponente nimmt...
musst du ausprobieren

aber wie gesagt ich würde eh von JButton ableiten
 
G

Gast

Gast
und wie kann ich das nachbilden wenn ich jButton ableite? Kannste mir ein tipp geben? vielleicht ist es ja eh die bessere variante.
 
G

Gast2

Gast
kommt drauf an was du vor hast du kannst ziemlich viel machen...

um was du zu malen kannst du paintComponent von deinem JButton überschreiben...
mit dem getModel bekommst dein button model mit welchem du abfragen kannst ob er gerade gedrückt ist ob drüber gefahren wird usw. je nachdem kannst du was malen lassen...
du kannst aber auch einfach setText() nehmen und set Icon so hast du einen text + ein icon und und du hast eub standard button ist()...
du kannst dir auch verschiedene selber gemalte bilder machen und bei jedem z.B. button ist gedrückt, button rollover kannst dem enstprechend ein Bild setzen... kannst du alles in der paintMethode machen mit dem model brauchst halt nur die entsprechende bilder dazu...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3
T Paint-Methode geht nicht AWT, Swing, JavaFX & SWT 5
F Paint-Methode Überschreiben macht Refresh-Fehler ? AWT, Swing, JavaFX & SWT 8
B paint methode wiederholen AWT, Swing, JavaFX & SWT 6
G Problem mit paint Methode und Buttons AWT, Swing, JavaFX & SWT 10
T JPanel - paint Methode?, aber wie AWT, Swing, JavaFX & SWT 13
K paint-Methode überschrieben - trotzdem JComponenten zeichnen AWT, Swing, JavaFX & SWT 5
bummerland paint Methode AWT, Swing, JavaFX & SWT 2
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen


Oben