Adding customized JPanel's to a frame

This seems like a very easy solution, but I've been looking around and can't find a way to solve it.
Let's say I have a class like:
public class StickyPerson extends JComponent {
    private int x, y;
     * Set coordinates for the sticky person
     * @param x Position x
     * @param y Position y
    public void setCoordinates(int x, int y) {
        this.x = x;
        this.y = y;
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.drawOval(this.x, this.y, 50, 50);
}and in my main class I do like that:
      StickyPerson aPerson = new StickyPerson();
      aPerson.setCoordinates(90, 100);
      frame.add(aPerson);
      aPerson.setCoordinates(290, 100);
      frame.add(aPerson);The problem I'm dealing with is that only the last StickyPerson object is drawn. I've tested with other shapes as well and got the same result, only the last object is shown.
It's clear that I'm making a mistake somewhere but I can't find where. Any ideas?
Thank you
Edited by: Raisen on Sep 10, 2009 12:00 AM

Thanks for all the replies. After reading more about the layout managers, I found out that in this specific project, I need to set the layout manager to null because I'm going to be dealing with drawings all over my frame.
I've added setBounds and setSize inside the paintComponent method but somehow, whenever I add the component to the frame, the method is never called.
Example:
public class StickyPerson extends JComponent {
    public StickyPerson(JFrame aFrame) {
        super();
        insets = aFrame.getInsets();
    public void paintComponent (Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        GradientPaint redtowhite = new GradientPaint(0,0,Color.GRAY,
                100, 0, Color.WHITE);
        g2.setPaint(redtowhite);
        g2.fill (new Ellipse2D.Double(this.x, this.y, this.w, this.h));
        g2.setColor(Color.BLACK);
        g2.drawString(this.text, this.x+25, this.y+25);
        this.setSize(w, h);
        this.setBounds(10 + this.insets.left, 50 + this.insets.top,
                this.w, this.h);
}and in my main code:
      JFrame frame = new JFrame("Example");
      frame.getContentPane().setLayout(null);
      frame.setSize(550, 400);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      StickyPerson stickyPerson = new StickyPerson(frame);
      stickyPerson.setCoordinates(10, 20, 200, 40);
      stickyPerson.setText("Hello World");
      frame.add(stickyPerson);
code}
I've omitted the other irrelevant methods to shorten the code. I've attached breakpoints inside the paintComponent method but it never reaches it. I've tried to use repaint(), validate(), repack().                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

Similar Messages

  • Custom JPanel moves inside JFrame when Jpanel.paintComponent(...) is called

    I have a custom JPanel (CompassCalculatorPanel) that is created, setup and placed within a custom JFrame (CompassCalcFrame). Calling the JFrame constructor sets this all up and makes the Frame show up. All is good with placement and drawing initially. Then when a user changes the spinner value (change the compass heading) it is supposed to redraw the arrow within the panel. It does this just fine, but on the repaint, and subsequent paints, the Panel ends up being placed in the upper left corner of the frame, rather than at the place I positioned it. I've tried saving the upper left corner placement coordinates and calling setBounds(...) before and after the paintComponent(...) method is called. This has no effect, the panel still resides at 0, 0.
    boldAny help that keeps the panel in place would be appreciated!*bold*
    I am opening a new CompassCalcFrame with the following code from another GUI application like this (but this works from an example program perspective):
    import com.vikingvirtual.flightsim.CompassCalcFrame;
    * @author madViking
    public class Main
        public static void main(String[] args)
            CompassCalcFrame CCF = new CompassCalcFrame();
    }The CompassCalcFrame.java code:
    package com.vikingvirtual.flightsim;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Insets;
    import java.awt.Point;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JSeparator;
    import javax.swing.JSpinner;
    import javax.swing.JTextField;
    * @author madViking
    public class CompassCalcFrame extends JFrame
        private CompassCalculatorPanel ccPanel;
        private JButton closeButton;
        private JLabel frameTitle;
        private JSeparator frameSeparator1;
        private JSpinner hdgSpinner;
        private JTextField neField;
        private JTextField eField;
        private JTextField seField;
        private JTextField sField;
        private JTextField swField;
        private JTextField wField;
        private JTextField nwField;
        private Point ccPanelPoint;
        public CompassCalcFrame()
            super ("Compass Heading Calculator");
            initComponents();
            this.setVisible(true);
            calculateAndDraw();
        private void initComponents()
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.setLayout(null);
            this.setBackground(Color.BLACK);
            this.setForeground(Color.BLACK);
            Container ccPane = this.getContentPane();
            Dimension panelDim = ccPane.getSize();
            Font buttonFont = new Font("Tahoma", 0, 12);
            Font compassFont = new Font("Digital-7", 0, 24);
            Font titleFont = new Font("Lucida Sans", 1, 14);
            frameTitle = new JLabel();
            frameTitle.setText("Compass Heading Calculator");
            frameTitle.setFont(titleFont);
            frameTitle.setForeground(Color.WHITE);
            closeButton = new JButton();
            closeButton.setText("Close");
            closeButton.setToolTipText("Click to close view");
            closeButton.setFont(buttonFont);
            closeButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt)
                                                                              {closeButtonActionPerformed(evt);}});
            hdgSpinner = new JSpinner();
            hdgSpinner.setFont(compassFont);
            hdgSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 359, 1));
            hdgSpinner.setToolTipText("Enter heading to see angles change");
            hdgSpinner.addChangeListener(new javax.swing.event.ChangeListener() {public void stateChanged(javax.swing.event.ChangeEvent evt)
                                                                                {hdgSpinnerStateChanged(evt);}});
            neField = new JTextField();
            neField.setBackground(Color.BLACK);
            neField.setEditable(false);
            neField.setFont(compassFont);
            neField.setForeground(Color.WHITE);
            neField.setHorizontalAlignment(JTextField.CENTER);
            neField.setBorder(null);
            eField = new JTextField();
            eField.setBackground(Color.BLACK);
            eField.setEditable(false);
            eField.setFont(compassFont);
            eField.setForeground(Color.WHITE);
            eField.setHorizontalAlignment(JTextField.CENTER);
            eField.setBorder(null);
            seField = new JTextField();
            seField.setBackground(Color.BLACK);
            seField.setEditable(false);
            seField.setFont(compassFont);
            seField.setForeground(Color.WHITE);
            seField.setHorizontalAlignment(JTextField.CENTER);
            seField.setBorder(null);
            sField = new JTextField();
            sField.setBackground(Color.BLACK);
            sField.setEditable(false);
            sField.setFont(compassFont);
            sField.setForeground(Color.WHITE);
            sField.setHorizontalAlignment(JTextField.CENTER);
            sField.setBorder(null);
            swField = new JTextField();
            swField.setBackground(Color.BLACK);
            swField.setEditable(false);
            swField.setFont(compassFont);
            swField.setForeground(Color.WHITE);
            swField.setHorizontalAlignment(JTextField.CENTER);
            swField.setBorder(null);
            wField = new JTextField();
            wField.setBackground(Color.BLACK);
            wField.setEditable(false);
            wField.setFont(compassFont);
            wField.setForeground(Color.WHITE);
            wField.setHorizontalAlignment(JTextField.CENTER);
            wField.setBorder(null);
            nwField = new JTextField();
            nwField.setBackground(Color.BLACK);
            nwField.setEditable(false);
            nwField.setFont(compassFont);
            nwField.setForeground(Color.WHITE);
            nwField.setHorizontalAlignment(JTextField.CENTER);
            nwField.setBorder(null);
            frameSeparator1 = new JSeparator();
            frameSeparator1.setForeground(Color.WHITE);
            frameSeparator1.setBackground(Color.BLACK);
            ccPanel = new CompassCalculatorPanel();
            // Add components to pane
            ccPane.add(frameTitle);
            ccPane.add(closeButton);
            ccPane.add(frameSeparator1);
            ccPane.add(nwField);
            ccPane.add(hdgSpinner);
            ccPane.add(neField);
            ccPane.add(wField);
            ccPane.add(ccPanel);
            ccPane.add(eField);
            ccPane.add(swField);
            ccPane.add(sField);
            ccPane.add(seField);
            // Begin Component Layout
            Insets paneInsets = ccPane.getInsets();
            Point P1 = new Point(0, 0);
            Point P2 = new Point(0, 0);
            Point P3 = new Point(0, 0);
            Dimension size = frameTitle.getPreferredSize();
            frameTitle.setBounds((5 + paneInsets.left), (5 + paneInsets.top), size.width, size.height);
            P1.setLocation((5 + paneInsets.left), (5 + paneInsets.top + size.height + 5));
            P2.setLocation((P1.x + size.width + 5), (paneInsets.top + 5));
            size = closeButton.getPreferredSize();
            closeButton.setBounds(P2.x, P2.y, size.width, size.height);
            frameSeparator1.setBounds(P1.x, P1.y, (panelDim.width - paneInsets.left - paneInsets.right), 10);
            P1.setLocation(P1.x, (P1.y + 10 + 5));
            P2.setLocation((P1.x + 50 + 75), P1.y);
            P3.setLocation((P1.x + 50 + 75 + 60 + 75), P1.y);
            nwField.setBounds(P1.x, P1.y, 50, 26);
            hdgSpinner.setBounds(P2.x, P2.y, 60, 26);
            neField.setBounds(P3.x, P3.y, 50, 26);
            P2.setLocation((P1.x + 50 + 5), (P1.y + 26 + 5));
            P1.setLocation(P1.x, (P1.y + 26 + 5 + 87));
            P3.setLocation((P1.x + 50 + 5 + 200 + 5), P1.y);
            wField.setBounds(P1.x, P1.y, 50, 26);
            ccPanel.setBounds(P2.x, P2.y, 200, 200);
            ccPanelPoint = new Point(P2.x, P2.y);
            eField.setBounds(P3.x, P3.y, 50, 26);
            P1.setLocation(P1.x, (P1.y + 26 + 87 + 5));
            P2.setLocation((P1.x + 50 + 80), P1.y);
            P3.setLocation((P1.x + 50 + 80 + 50 + 80), P1.y);
            swField.setBounds(P1.x, P1.y, 50, 26);
            sField.setBounds(P2.x, P2.y, 50, 26);
            seField.setBounds(P3.x, P3.y, 50, 26);
            // End with Frame sizing
            Dimension frameDim = new Dimension((paneInsets.left + 5 + 50 + 5 + 200 + 5 + 50 + 5 + paneInsets.right + 10), (P1.y + 26 + 5 + paneInsets.bottom + 40));
            this.setPreferredSize(frameDim);
            this.setSize(frameDim);
            //this.setSize((paneInsets.left + 5 + 50 + 5 + 200 + 5 + 50 + 5 + paneInsets.right), (P1.y + 26 + 5 + paneInsets.bottom));
        private void closeButtonActionPerformed(java.awt.event.ActionEvent evt)
            this.dispose();
        private void hdgSpinnerStateChanged(javax.swing.event.ChangeEvent evt)
            calculateAndDraw();
        private void calculateAndDraw()
            int angle = (Integer)hdgSpinner.getValue();
            int[] headings = new int[7];
            int addAngle = 45;
            for (int i = 0; i < 7; i++)
                headings[i] = angle + addAngle;
                if (headings[i] >= 360)
                    headings[i] -= 360;
                addAngle += 45;
            neField.setText(String.valueOf(headings[0]));
            eField.setText(String.valueOf(headings[1]));
            seField.setText(String.valueOf(headings[2]));
            sField.setText(String.valueOf(headings[3]));
            swField.setText(String.valueOf(headings[4]));
            wField.setText(String.valueOf(headings[5]));
            nwField.setText(String.valueOf(headings[6]));
            ccPanel.paintComponent(this.getGraphics(), angle);
            ccPanel.setBounds(ccPanelPoint.x, ccPanelPoint.y, 200, 200);
            //ccPanel.repaint(this.getGraphics(), angle);
    }The CompassCalculatorPanel.java code:
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    package com.vikingvirtual.flightsim;
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Stroke;
    * @author madViking
    public class CompassCalculatorPanel extends javax.swing.JPanel
        private int xCent;
        private int yCent;
        public CompassCalculatorPanel()
            super();
        @Override
        public void paintComponent(Graphics g)
            paintComponent(g, 0);
        public void repaint(Graphics g, int angle)
            paintComponent(g, angle);
        public void paintComponent(Graphics g, int angle)
            super.paintComponent(g);
            Dimension panelDim = this.getSize();
            xCent = (panelDim.width / 2);
            yCent = (panelDim.height / 2);
            float[] dashArray = {8.0f};
            Graphics2D g2D = (Graphics2D)g;
            g2D.setColor(new Color(53, 153, 0));
            g2D.fillRect(0, 0, panelDim.width, panelDim.height);
            BasicStroke hdgLine = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
            BasicStroke northLine = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, dashArray, 0.0f);
            Stroke stdStroke = g2D.getStroke();
            // Setup Heading Arrow Points
            Point hdgBottom = new Point(xCent, panelDim.height - 15);
            Point hdgTop = new Point(xCent, 15);
            Point ltHdgArr = new Point(xCent - 10, 20);
            Point rtHdgArr = new Point(xCent + 10, 20);
            // Setup North Arrow Points
            Point nthBottom = new Point(xCent, panelDim.height - 15);
            Point nthTop = new Point(xCent, 15);
            Point ltNthArr = new Point(xCent - 8, 20);
            Point rtNthArr = new Point(xCent + 8, 20);
            // Rotate North Arrow Points
            nthBottom = rotatePoint(nthBottom, (0 - angle), true);
            nthTop = rotatePoint(nthTop, (0 - angle), true);
            ltNthArr = rotatePoint(ltNthArr, (0 - angle), true);
            rtNthArr = rotatePoint(rtNthArr, (0 - angle), true);
            // Draw Heading Line
            g2D.setColor(Color.RED);
            g2D.setStroke(hdgLine);
            g2D.drawLine(hdgBottom.x, hdgBottom.y, hdgTop.x, hdgTop.y);
            g2D.drawLine(ltHdgArr.x, ltHdgArr.y, hdgTop.x, hdgTop.y);
            g2D.drawLine(rtHdgArr.x, rtHdgArr.y, hdgTop.x, hdgTop.y);
            g2D.setStroke(stdStroke);
            // Draw North Line
            g2D.setColor(Color.WHITE);
            g2D.setStroke(northLine);
            g2D.drawLine(nthBottom.x, nthBottom.y, nthTop.x, nthTop.y);
            g2D.drawLine(ltNthArr.x, ltNthArr.y, nthTop.x, nthTop.y);
            g2D.drawLine(rtNthArr.x, rtNthArr.y, nthTop.x, nthTop.y);
            g2D.setStroke(stdStroke);
            // Draw circles
            g2D.setColor(Color.BLUE);
            g2D.setStroke(hdgLine);
            g2D.drawOval(5, 5, (panelDim.width - 10), (panelDim.height - 10));
            g2D.setStroke(stdStroke);
            g2D.fillOval((xCent - 2), (yCent - 2), 5, 5);
            g2D.setStroke(stdStroke);
        private Point rotatePoint(Point p, int angle, boolean centerRelative)
            double ix, iy;
            double hyp = 0.0;
            double degrees = 0.0;
            if (centerRelative == true)
                ix = (double)(p.x - xCent);
                iy = (double)((p.y - yCent)*-1);
            else
                ix = (double)p.x;
                iy = (double)p.y;
            if (ix == 0)
                ix = 1;
            hyp = Math.sqrt((Math.pow(ix, 2)) + (Math.pow(iy, 2)));
            if ((ix >= 0) && (iy >= 0))
                degrees = Math.toDegrees(Math.atan(ix/iy));
            else if((ix >= 0) && (iy < 0))
                degrees = Math.abs(Math.toDegrees(Math.atan(iy/ix)));
                degrees = degrees + 90.0;
            else if ((ix < 0) && (iy < 0))
                degrees = Math.toDegrees(Math.atan(ix/iy));
                degrees = degrees + 180.0;
            else if ((ix < 0) && (iy >= 0))
                degrees = Math.abs(Math.toDegrees(Math.atan(iy/ix)));
                degrees = degrees + 270.0;
            degrees = degrees + angle;
            if (degrees >= 360)
                degrees = degrees - 360;
            if (degrees < 0)
                degrees = degrees + 360;
            double interX = Math.sin(Math.toRadians(degrees));
            double interY = Math.cos(Math.toRadians(degrees));
            interX = interX * hyp;
            interY = ((interY * hyp) * -1);
            if (centerRelative == true)
                p.x = xCent + (int)Math.floor(interX);
                p.y = yCent + (int)Math.floor(interY);
            else
                p.x = (int)Math.floor(interX);
                p.y = (int)Math.floor(interY);
            return p;
    }

    In response to the first couple of comments made about using Absolute positioning (layout null), I took a look at the page on doing layouts, which happens to be the link you sent. I read about each, and decided that a GridBag layout would be best. So I created a new class called CompassCalcGridBagFrame and set it all up using the same components, but with a Grid Bag layout. I encounter the exact same problem.
    Just FYI: I originally created this frame using the NetBeans (6.9.1) Frame form builder. By default that uses the Free Design setting, which creates group layouts for both vertical and horizontal spacing. This is where the problem first came to be. I next used the builder to create an absolute positioning frame, which had the same issue. That is when I started building my frames using code only - no NetBeans GUIs. This is where the absolute layout from scratch code started. Same effect. And now, I've created a Grid Bag layout from code, and same effect. There has to be something I'm missing overall, as this effects all of my different layout designs.
    The one thing from gimbal2's previous comment is, should I be using this custom panel within another panel? I am currently adding all of the components (and in Grid Bag, the GridBag layout) to the frame pane itself. Is that OK, or should I use a generic JPanel, and have the components all within that?
    Here is the code for the newest frame class (CompassCalcGridBagFrame):
    package com.vikingvirtual.flightsim;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.Point;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JSeparator;
    import javax.swing.JSpinner;
    import javax.swing.JTextField;
    * @author madViking
    public class CompassCalcGridBagFrame extends JFrame
        private CompassCalculatorPanel ccPanel;
        private JButton closeButton;
        private JLabel frameTitle;
        private JSeparator frameSeparator1;
        private JSpinner hdgSpinner;
        private JTextField neField;
        private JTextField eField;
        private JTextField seField;
        private JTextField sField;
        private JTextField swField;
        private JTextField wField;
        private JTextField nwField;
        private Point ccPanelPoint;
        public CompassCalcGridBagFrame()
            super ("Compass Heading Calculator");
            initComponents();
            this.pack();
            this.setVisible(true);
            calculateAndDraw();
        private void initComponents()
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            Container ccPane = this.getContentPane();
            ccPane.setLayout(new GridBagLayout());
            ccPane.setBackground(Color.BLACK);
            ccPane.setForeground(Color.BLACK);
            Font buttonFont = new Font("Tahoma", 1, 12);
            Font compassFont = new Font("Digital-7", 0, 24);
            Font titleFont = new Font("Lucida Sans", 1, 14);
            frameTitle = new JLabel();
            frameTitle.setText("Compass Heading Calculator");
            frameTitle.setFont(titleFont);
            frameTitle.setHorizontalAlignment(JLabel.CENTER);
            frameTitle.setPreferredSize(new Dimension(220, 25));
            frameTitle.setForeground(Color.BLACK);
            closeButton = new JButton();
            closeButton.setText("Close");
            closeButton.setToolTipText("Click to close view");
            closeButton.setFont(buttonFont);
            closeButton.setPreferredSize(new Dimension(75, 25));
            closeButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt)
                                                                              {closeButtonActionPerformed(evt);}});
            hdgSpinner = new JSpinner();
            hdgSpinner.setFont(compassFont);
            hdgSpinner.setModel(new javax.swing.SpinnerNumberModel(0, -1, 360, 1));
            hdgSpinner.setToolTipText("Enter heading to see angles change");
            hdgSpinner.setPreferredSize(new Dimension(50, 26));
            hdgSpinner.addChangeListener(new javax.swing.event.ChangeListener() {public void stateChanged(javax.swing.event.ChangeEvent evt)
                                                                                {hdgSpinnerStateChanged(evt);}});
            neField = new JTextField();
            neField.setBackground(Color.BLACK);
            neField.setEditable(false);
            neField.setFont(compassFont);
            neField.setForeground(Color.WHITE);
            neField.setHorizontalAlignment(JTextField.CENTER);
            neField.setPreferredSize(new Dimension(50, 26));
            neField.setBorder(null);
            eField = new JTextField();
            eField.setBackground(Color.BLACK);
            eField.setEditable(false);
            eField.setFont(compassFont);
            eField.setForeground(Color.WHITE);
            eField.setHorizontalAlignment(JTextField.CENTER);
            eField.setPreferredSize(new Dimension(50, 26));
            eField.setBorder(null);
            seField = new JTextField();
            seField.setBackground(Color.BLACK);
            seField.setEditable(false);
            seField.setFont(compassFont);
            seField.setForeground(Color.WHITE);
            seField.setHorizontalAlignment(JTextField.CENTER);
            seField.setPreferredSize(new Dimension(50, 26));
            seField.setBorder(null);
            sField = new JTextField();
            sField.setBackground(Color.BLACK);
            sField.setEditable(false);
            sField.setFont(compassFont);
            sField.setForeground(Color.WHITE);
            sField.setHorizontalAlignment(JTextField.CENTER);
            sField.setPreferredSize(new Dimension(50, 26));
            sField.setBorder(null);
            swField = new JTextField();
            swField.setBackground(Color.BLACK);
            swField.setEditable(false);
            swField.setFont(compassFont);
            swField.setForeground(Color.WHITE);
            swField.setHorizontalAlignment(JTextField.CENTER);
            swField.setPreferredSize(new Dimension(50, 26));
            swField.setBorder(null);
            wField = new JTextField();
            wField.setBackground(Color.BLACK);
            wField.setEditable(false);
            wField.setFont(compassFont);
            wField.setForeground(Color.WHITE);
            wField.setHorizontalAlignment(JTextField.CENTER);
            wField.setPreferredSize(new Dimension(50, 26));
            wField.setBorder(null);
            nwField = new JTextField();
            nwField.setBackground(Color.BLACK);
            nwField.setEditable(false);
            nwField.setFont(compassFont);
            nwField.setForeground(Color.WHITE);
            nwField.setHorizontalAlignment(JTextField.CENTER);
            nwField.setPreferredSize(new Dimension(50, 26));
            nwField.setBorder(null);
            frameSeparator1 = new JSeparator();
            frameSeparator1.setForeground(Color.WHITE);
            frameSeparator1.setBackground(Color.BLACK);
            frameSeparator1.setPreferredSize(new Dimension(320, 10));
            ccPanel = new CompassCalculatorPanel();
            ccPanel.setPreferredSize(new Dimension(250, 250));
            GridBagConstraints gbc = new GridBagConstraints();
            // Begin Component Layout
            gbc.insets = new Insets(0, 0, 0, 0);
            gbc.fill = GridBagConstraints.NONE;
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.FIRST_LINE_START;
            ccPane.add(nwField, gbc);
            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.gridwidth = 2;
            gbc.gridheight = 1;
            gbc.weightx = 0.4;
            gbc.weighty = 0.4;
            gbc.anchor = GridBagConstraints.PAGE_START;
            ccPane.add(hdgSpinner, gbc);
            gbc.gridx = 3;
            gbc.gridy = 0;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.FIRST_LINE_END;
            ccPane.add(neField, gbc);
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.LINE_START;
            ccPane.add(wField, gbc);
            gbc.gridx = 1;
            gbc.gridy = 1;
            gbc.gridwidth = 2;
            gbc.gridheight = 1;
            gbc.weightx = 1.0;
            gbc.weighty = 1.0;
            gbc.anchor = GridBagConstraints.CENTER;
            ccPane.add(ccPanel, gbc);
            gbc.gridx = 3;
            gbc.gridy = 1;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.LINE_END;
            ccPane.add(eField, gbc);
            gbc.gridx = 0;
            gbc.gridy = 2;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.LAST_LINE_START;
            ccPane.add(swField, gbc);
            gbc.gridx = 1;
            gbc.gridy = 2;
            gbc.gridwidth = 2;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.PAGE_END;
            ccPane.add(sField, gbc);
            gbc.gridx = 3;
            gbc.gridy = 2;
            gbc.gridwidth = 1;
            gbc.gridheight = 1;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.anchor = GridBagConstraints.LAST_LINE_END;
            ccPane.add(seField, gbc);
            gbc.gridx = 0;
            gbc.gridy = 3;
            gbc.gridwidth = 4;
            gbc.gridheight = 1;
            gbc.insets = new Insets(10, 5, 10, 5);
            gbc.weightx = 0.6;
            gbc.weighty = 0.6;
            gbc.anchor = GridBagConstraints.CENTER;
            ccPane.add(frameSeparator1, gbc);
            gbc.gridx = 1;
            gbc.gridy = 4;
            gbc.gridwidth = 2;
            gbc.gridheight = 1;
            gbc.anchor = GridBagConstraints.PAGE_START;
            ccPane.add(closeButton, gbc);
        private void closeButtonActionPerformed(java.awt.event.ActionEvent evt)
            this.dispose();
        private void hdgSpinnerStateChanged(javax.swing.event.ChangeEvent evt)
            calculateAndDraw();
        private void calculateAndDraw()
            int angle = (Integer)hdgSpinner.getValue();
            if (angle == -1)
                angle = 359;
            if (angle == 360)
                angle = 0;
            int[] headings = new int[7];
            int addAngle = 45;
            for (int i = 0; i < 7; i++)
                headings[i] = angle + addAngle;
                if (headings[i] >= 360)
                    headings[i] -= 360;
                addAngle += 45;
            hdgSpinner.setValue(Integer.valueOf(angle));
            neField.setText(String.valueOf(headings[0]));
            eField.setText(String.valueOf(headings[1]));
            seField.setText(String.valueOf(headings[2]));
            sField.setText(String.valueOf(headings[3]));
            swField.setText(String.valueOf(headings[4]));
            wField.setText(String.valueOf(headings[5]));
            nwField.setText(String.valueOf(headings[6]));
            ccPanel.paintComponent(this.getGraphics(), angle);
    }

  • Adding a JPanel to a JCheckBox (that's not a typo)

    Happy Friday everyone! Time for another slightly ridiculous question from yours truly.
    Long story short, I'm trying to create a JCheckBox with three potential states instead of two: checked, unchecked, and undetermined. My eventual goal is to use this as a renderer in a JTree of options with sub-options, etc.
    Don't read this paragraph if you don't care about my ultimate goal and want to get onto the SSCCE: For example, the JTree might contain a node that represents "all animals" and then underneath it is a list of animals. The user would be able to select the "all animals" JCheckBox, which would then select all of the animal JCheckBoxes underneath it (I already have this part working perfectly). However, what should happen when the user goes into the structure and deselects "ducks" from the animal tree? Currently the "all animals" JCheckBox becomes deselected, but this doesn't seem very intuitive to me. So I'd like a third option that basically means "some of my children are selected, some are deselected". (My actual program has nothing to do with animals, but it's a fun example)
    The meat and potatoes of the problem: In order to simulate the third state of the JCheckBox, I thought I'd add to it a JPanel that painted an X (or a slash, or whatever means "indeterminate") on itself. The problem is, all sorts of interesting things start happening when I do this. The JPanel is quite large before any repainting goes on. After the first call to repaint (I simulate this by resizing the JFrame a tiny tiny tiny bit), the JPanel isn't visible at all. And after that, only the JPanel is visible.
    Am I missing something? Is there a better way to do what I'm trying to do?
    The SSCCE:
    import javax.swing.JFrame;
    import java.awt.Dimension;
    import javax.swing.JCheckBox;
    import javax.swing.JPanel;
    import java.awt.Graphics;
    import javax.swing.BoxLayout;
    import javax.swing.UIManager;
    public class TestCheckBoxPanel{
         public TestCheckBoxPanel(){
              try {
                   UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
              catch (Exception e) {
                   e.printStackTrace();
              JFrame frame = new JFrame("Testing JCheckBox");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
              JCheckBox regularCheckBox = new JCheckBox("CheckBox", true);
              final JCheckBox panelCheckBox = new JCheckBox("PanelCheckBox", false);
              JPanel panel = new JPanel(){
                   public void paintComponent(Graphics g){
                        super.paintComponent(g);
                        //this almost works, but what happens if the JCheckBox
                        //is a different size on a different computer?
                        //is that even possible?
                        setMinimumSize(new Dimension(10, 10));
                        setMaximumSize(new Dimension(10, 10));
                        setPreferredSize(new Dimension(10, 10));
                        //this makes the JPanel huge, and makes me cry
                        setMinimumSize(new Dimension(panelCheckBox.getWidth(), panelCheckBox.getHeight()));
                        setMaximumSize(new Dimension(panelCheckBox.getWidth(), panelCheckBox.getHeight()));
                        setPreferredSize(new Dimension(panelCheckBox.getWidth(), panelCheckBox.getHeight()));
                        g.drawLine(0, 0, getWidth(), getHeight());
                        g.drawLine(getWidth(), 0, 0, getHeight());
                   } //end paintComponent
              }; //end new JPanel
              panelCheckBox.add(panel);
              frame.add(regularCheckBox);
              frame.add(panelCheckBox);
              frame.pack();
              frame.setVisible(true);     
         public static void main(String [] args){
              new TestCheckBoxPanel();
    }

    jduprez wrote:
    Hello,
    First thank you for the humourous wording.Haha, I figure if I'm going to ask ridiculous questions, the least I can do is ask them in an entertaining way!
    Admittedly though, your problem is more complex than it seem.That's what I was afraid of :(
    I don't see you setting the layout of the JCheckbox (viewed as a Container of the JPanel). I tried experimenting with setting the JCheckBox's layout. Using a null layout and absolute positioning actually ends up with a monstrous looking cut-in-half JCheckBox with no text.
    Arguably, you know that the bounds are initially (0,0,0,0), but relying on the 0,0 origin assumes the box is always on the left side (which is not true as a JCheckbox can have a different alignment/orientation/don't remember the term.That should actually be okay, I can assume that the box will be on the left side for these purposes.
    Moreover, setting the size with a fixed value does not account for what may happen to the checkbox if you stretch it, change the font, change the spacing,...Exactly. That's why I wanted to use the JCheckBox's width and height, which ends up making the JPanel quite large instead of just the size of the box. I'd much rather prefer using a width and height that would change with the JCheckBox's size.
    When you say you have already dealt with the 3-state problem, you mean you have designed a custom model? Sort of. I wrote a custom renderer and nodes for my JTree. Each node contains its state (selected, deselected, and undetermined) which changes when the user selects a node in the JTree, and the renderer is to return a Component based on that status. The setting of the state works fine, it's just figuring out what the renderer should return.
    Then your component is no more a JCheckbox. I mean, do you still need that it extends JCheckbox?That's a good point. I was using a JCheckBox just because it seemed like the most logical/intuitive component, but I could use anything. The node's selected status is independent of the JCheckBox's selected status (I set the JCheckBox based off the node's state).
    If not, one thing you could try is to implement a 3StateCheckBox as a JPanel, which contains...I think what I might try to do is simply use a JLabel with an icon, and then have three separate icons for the three states (I might even use images of JCheckBoxes, haha).

  • Adding custom fields to shopping cart in SRM 7.0

    Hi My dear Experts,
    I am having big doubt also a lot of confussion as per my understanding regarding adding custom fields to SC.
    I believe,
    i) It can be achieved by configuration in spro with respect to Meta data frame.
    i,e  Configure field control->configure control for fields on Header/Item level
    after that
    configure customer fields->Define cistomer fields on Header/Item level.
    ii) I also doubt fields can be added through Webdynpro enhancement of standard component.
    Pls clarify my doubt with little detail which is the best way to achieve my requirement ??
    Is Webdynpro Enhancement  really needed ??

    Hi ,
       Example for  Adding fields in SC accounting Tab ...follow the below example
    1. Add custom field ZZTESTACCT  in   structure   INCL_EEW_PD_ACC_CSF by  using  append structure.
    2. Spro ->Supplier Relationship Management u2192 SRM Server u2192 Cross application basic settings u2192 Extensions and field controls (personalization) u2192 Configure field control ->Configure Control for Fields of Substructures
    then click on  "Metadata for Fields of Substructures and Table-Like Enhancements"
    add the below entry
    Bus. Object Set Type  : 31
    Structure Field Name  : ZZTESTACCT
    Bus. Object Type       : BUS2121
    Set Level                    : Item
    Field Visible :  Check box should be checked
    Field Enable :  check box should be checked
    if you create the above entry then you can see ZZTESTACCT field in the accounting tab.
    Second point :
    WD_BADI_DOMODIFYVIEW  is a Badi you can implement this badi for the WD component and View to handle the UI elements.
    regards,
    Devi

  • Adding custom Components

    My Swing is a little rusty atm. However I'm writing a large program where I need to extract the different visual buildingblocks of my gui into separate classess.
    A short example of an external JComponent:
    public class View extends JComponent{
        JPanel panel;
        public View(){
            panel = new JPanel();
            panel.setPreferredSize(new Dimension(300,300));
            panel.setLayout(new FlowLayout());
            panel.add(new JLabel("text"));
    }Now I want to add the above class to my main program (this is psudo code)
    public class MainProgram{
         JPanel j;
         MainProgram(){
             j = new Jpanel();
             j.setLayout(new FlowLayout());
             j.add(view);
    }This will obviously not work since the JPanel "panel" can't know about the JPanel "j". Is there a trick that can be used step around this, or does the constructor MainProgram() have to take the JPanel "panel" as argument (as examplified below) ?
         MainProgram(Jpanel panel){
             j = new Jpanel();
             j.setLayout(new FlowLayout());
             j.add(view);
             panel.add(j);
         }

    Fair enough. Basically the following code to replace "View" would seem correct from my point of view. I haven't got it working yet though. The class should be added to the "MainProgram" as displayed above.
    class View extends JPanel{
        JPanel panel;
        public View(){
            panel = new JPanel();
            panel.setPreferredSize(new Dimension(300,300));
            panel.setLayout(new BorderLayout());
            panel.setBackground(Color.BLACK);
            panel.add(new JLabel("textr"), BorderLayout.NORTH);
    }And just to clarify what it is I want: I want to create a custom JPanel in a separate class. Then add this custom JPanel inside another regular JPanel in my "MainProgram" class.
    Message was edited by:
    Toxic

  • I'm having trouble getting a custom JPanel to display correctly...

    HI, I'm having trouble getting a custom JPanel to display correctly. I'm using the JPanel inside a JFrame to display some really custom graphs. The graphing side of this whole thing works flawlessly. The problem I'm having is that when I close the JFrame by using setVisible(false); and then openning it again using setVisible(true); all the information on it is garbage. There are buttons from the JFrame which orgininally opened it and it has trouble openning a second graph if I choose too. I also have the same problem if i move the frame off the screen and move it back. I'd really appreciate any help.
    Thanks!

    With option #1 -- I modified and rebuilt the 3rd-party JARs and referenced them in NetBeans. When I choose clean and build, the Ant processes results in an error: "jarsigner returns 1". So it doesn't seem to run at all.As long as you rebuilt the jars correctly without the original signature, I think it should work.
    An example of unsigning a jar using ant is here:
    http://frank.zinepal.com/unsign-a-jar-with-ant
    Do you think the multiple-JNLP idea would work if NetBeans didn't apply "my" signature to the 3rd-party JARs? Aside from manually copying the original JARs into the \dist directory, is there a better way to tell NetBeans to leave the 3rd-party JAR alone (ie, don't sign it again)?I think it's supposed to work (it's the mixed code signing situation I referred to in my prior post).
    For example, from your description it sounds like the default NetBeans build doesn't really support this style of deployment, so you would have to create a custom build which does what you need and is not triggered by NetBeans - which is doable, but annoying - it's sounds like you tried this, but were unable to get it to work as expected. For NetBeans specific help, you are better posting to a NetBeans forum (though you might be just the second person who has tried to do this with a JavaFX app).
    Also need to check the end user experience is acceptable too, because I think the dialog and warning handling for the mixed code situation is different.
    Look at the deployment guide section "Using <fx:resources> for Extension Descriptors" - I think it documents how to do what you want if you use a custom build file rather than letting NetBeans do the work:
    http://docs.oracle.com/javafx/2/deployment/javafx_ant_task_reference002.htm#CIABGCEE
    Hmm, a lot of running around to deploy an app which can open a file . . .

  • Adding Data into text and graphic frames - PLEASE CAN SOMEONE HELP?

    Hello Script buddies,
    Here is my script and I want to place data into the frames which I set up already in the inDesign template which loads correctly but unable to place the data into the frames, please refer to comments and if anyone can help me I will be very grateful.
    strFile = "C:\Users\dean.brooks\Documents\PoolSigns.xlsx"
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Workbooks.Open strFile
    intRow = 2
    Set objSheet = objExcel.ActiveWorkbook.WorkSheets(1)
    ' Cycle through cells in Pool Sign Schedule to retreive data
    Do Until objSheet.Cells(intRow, 3).Value = ""
    PoolSignScheduleSignNo = Trim(objSheet.Cells(intRow, 1).Value)
    PoolSignScheduleTemplate = Trim(objSheet.Cells(intRow, 3).Value)
    PoolSignScheduleDepth = Trim(objSheet.Cells(intRow, 5).Value)
    PoolSignScheduleWarningFile = Trim(objSheet.Cells(intRow, 7).Value)
    PoolSignScheduleWarningText = Trim(objSheet.Cells(intRow, 8).Value)
    PoolSignScheduleRegFile = Trim(objSheet.Cells(intRow, 10).Value)
    PoolSignScheduleRegText = Trim(objSheet.Cells(intRow, 11).Value)
    ' Open InDesign Template that corresponds to PoolSignScheduleTemplate
    Set myInDesign = CreateObject("InDesign.Application.CS3")
    Set myDocument = myInDesign.Open(PoolSignScheduleTemplate)
    'Frames, these commands won't work, can someone please help??
    Set DepthMarker = myDocument.Textframes.Item
    DepthMarker.Contents = PoolSignScheduleDepth
    Set WarningText = myDocument.Textframes.Item
    WarningText.Contents = PoolSignScheduleWarningText
    Set WarningSymbol = myDocument.Graphicframes.Item
    WarningSymbol.Contents = PoolSignScheduleWarningFile
    Set RegText = myDocument.Textframes.Item
    RegText.Contents= PoolSignScheduleRegText
    ' Save InDesign File to C:\ to be moved manually later to appropriate location
    myDocument.Save("C:\Pools\PoolSign\PoolSignScheduleSignNo.indd")
    myDocument.Close
    intRow = intRow + 1
    Loop
    objExcel.Quit
    WScript.Quit

    Hi Robert,
    Your problem starts here:
    Set DepthMarker = myDocument.Textframes.Item
    ...which item? Item takes either an integer (the index of the item) or a string (the contents of the label property, if any).
    Next, however, is that you should be more specific about *where* the text frame is in the document. What page or spread is it on? Let's say that the frame "DepthMarker" is on page 1:
    Set DepthMarker = myDocument.Pages.Item(1).TextFrames.Item(1)
    If there's only one frame on that page, you're in great shape. If not, you need to come up with some way to differentiate one frame from another. Script labels are a great way to do this. Let's say you've used the Script Label panel to add the label "DepthMarker" to the relevant frame on page 1, and added the label "WarningText" to another frame. In that case, you'd use something like this:
    Set DepthMarker = myDocument.Pages.Item(1).TextFrames.Item("DepthMarker")(0)
    Set WarningText = myDocument.Pages.Item(1).TextFrames.Item("WarningText")(0)
    ...When you use a string to refer to a page item by its label, InDesign returns an array, so you need to get the first item in the array (assuming that there's only one page item on the page with that label).
    Hope this makes sense! I'm typing it off the top of my head because I have to go speak at a conference tomorrow and am short on time--but it should get you pointed in the right direction.
    Thanks,
    Ole

  • Adding custom fields to Embedded Search

    Hi All,
    I have read the post [here|How to add custom fields to Embedded Search; about adding custom fields to Embedded Search. I am looking to add Employee Subgroup for use in Talent Management (specifically the STVN SuccessionPlanning component) and wanted to know if anyone can expand on the instructions in the link to add this field.
    It appears to be part of the HRTMC_PERSON search object connector already and while I've done some IMG configuration the field is showing in SuccessionPlanning, but not displaying any data.
    Additionally, I'd be interested in any tips to add information that is not from PA0002 should it be required in the future.
    Many thanks,
    Luke

    Hi Luke,
    I am assuming here that your search request fields are based on HRTCM_CENTRALPERSON search template. To enable your search to work on employee subgroup please do the following
    1) Check if the HRTMC_PERSON Template extracts the data from Infotype 0001 via SPRO node 'Define Search Models and Change Pointer' Extraction Class is 'CL_HRTMC_SEARCH_READ_PA_INFTY'.
    2) Via ESH_COCKPIT, goto Template Modeler and select your custom Software Component and press Edit. Goto roadmap step 5 - Define Requests - where all search request fields are defined. Its using these fields Talent search works.
    3) Select the search request e.g. 'SAP_TALENT_NAKISA', it would then show list searchable attributes in below table. Using 'Add' button select path for PERSK so that it can searched.
    It would look like this once selected
    OBJID(REL_CP_P)->HRTMC_REL_CP_P_209.REL_CP_P(REL_CP)->HRTMC_PERSON.OBJID->HRTMC_PERSON.ORG_ASSIGNMENT
    4) In step SPRO 'Define Search Requests and Search Field Names' , define Employee subgroup field with AliasSearchField = PERSK since thats what is defined in roadmap step 5.
    Hope it helps!
    Regards,
    Ricky Shah

  • Adding custom fields  through SE51

    Hi All!
    This is with regards to adding custom fields through Se51 to standard screens.I had added custom field KNVV-ZZKVGR6 to the screen.
    After drawing the text and I/O buttons.When I activate I am getting an syntax error saying Field KNVV-ZZKVGR6 is defined differently in screen (ABAP/4 field,Dictionary field).
    What does this mean.
    Also if i activate with a SAP standard field instead of the custom it is getting activated.
    But for both the ways I could not able to see the output on the actual transaction.Also the new drawings which i am drawing are in brown color(different form the existing one)
    Please advise.
    regards
    Praneeth

    hi Praneeth,
    what is the program name,screen number you are trying to modify..,and after appending the field <b>ZZKVGR6 to KNVV</b> , now go to table and choose menu <b>Utilities->Data base Utility-></b> now click on  <b>Activate and Adjust the Data base</b>, then try to add the field.
    and are you adding the field from Dictionary (i.e you have option Get From Dictionary in that give KNVV table name it will list the fields, choose zzkvgr6 from it, and place it in your screen.)
    the exit which you are adding should be appropriate one
    or else you won't get the desired results. what is the exit..
    Regards
    vijay

  • "500 internal server error" after adding custom fields to Address page

    I need to display custom fields on the "Addresses" and the "Personal Data" pages. For that, we added custom CI_INCLUDE fields in both PA0006 and PA0002 tables as per instructions below
    https://www.sdn.sap.com/irj/scn/wiki?path=/display/profile/essPersonalInformationUIenhancementwithoutmodification&focusedCommentId=28278867
    we also extended the Badi HRPAD00INFTYUI
    custom fields show up OK in page "Personal Data". However when trying to browse to page "Addresses"
    we get the following error:
    "500 internal server error - com.sap.tc.webdynpro.progmodel.context.ContextException: MappedNodeInfo(DetailView.SelectedInfotype): unknown child node Area8 ".
    "Area8" is one of the custom fields we added in PA0006 (Address infotype).
    any idea what is wrong?  maybe Badi HRPAD00INFTYUI cannot handle 2 infotypes in the same time?
    T.

    Hi Sasu,
    Its clearly saying contect binding error. Have you mapped  correctly from FcComponent to VcComponents.
    FcCompoenets for Model logic.
    Check the mappings correctly.
    If it is complete custom or new field then there will be could of steps.
    1) Reimport the model
    2) map new field to FcComponent
    3) Bind new Fields from Fc to Vc
    Rgds
    -SS

  • While adding custom field in urgent change-Create new field button in AET is not coming

    Dear All,
    we have requirement to add some custom fields in urgent change document. while adding custom fields using AET, create new field button is not coming.
    Thanks in advance. points will be awarded.
    Rahul

    Hi Jignesh,
    Thanks for your valueble inputs, it really helped me to understand the process.
    I checked in Web UI configuration for urgent change document as you mentioned but still that button is not coming.
    In transaction BSP_WD_CMPWB, i have created enh. set: Z_ENHANCEMENT_SET.
    Can you tell what to selelect in application and page popup which comes after selecting Enhance component button. Actually i tried but i am not able to add new record in conf.
    Thanks in advance.

  • CRM 7.0 / IS-U: adding custom fields to Business agreement for replication

    Hello Experts!
    We're working on replication of custom fields from IS-U to CRM 7.0.
    Can you help me with clarification of my understanding of these questions..?
    1) CRM/IS-U mapping tables for buag_main:
    Business Agreement(BUAG_MAIN) is a BO in CRM that corresponds to CRM table CRMM_BUAG and to Contract account in IS-U table FKKVKP.
    Table FKKVKP were enhanced with some z-fields,
    so we are going to enhance corresponding CRM table CRMM_BUAG (or CRMM_BUAG_H) with that new fields..
    But we see that these CRM and IS-U tables have far not the same field structures..
    So, the question: Which crm and is-u tables i should look, enhance and replicate for Business agreement?
    2) Access to Business agreement with possibility to add custom field:
    I couldn't find in Web UI where i can directly edit profile of Business Agreement..
    I've found just access to assignment block "Business agreement" on Account's profile overview page..(Role ServicePRO; Account details).
    There I used AET to add custom field..but I faced with problem when the 1st popup appeared: there was no enhanced object "Business Agreement"..
    Also in role "Utilities IC Agent" i've found "business agreement" profile but there I don't see buttons for adding custom fields..
    So, the question is: Where I can access Business agreement profile to enhance it with custom fields for replication with IS-U?
    3) CRM/IS-U data exchange functions:
    I tend to use tcode CRMC_BUT_CALL_FU:
    for CRM inbound event of BUAG object  - FM CRM_BUAG_MWX_PROCESS_EXT_STRUC..(as template).
    Question: Am I right that it fits my requirement to replicate custom fields from IS-U to CRM?
    Please tell me if you need more information..
    Looking forward to your answers.
    Thank you a lot in advance!
    Kind regards,
    Evgenia

    Hi Gobi,
    Thank you for advice. But:
    I've created fields not by using AET - I used documentation that Nicolas suggested me above.
    I've enhanced tables and structures that were mentioned there with my z-fields for both sides (CRM and ERP).
    Also I looked CRMC_BUT_CALL_FU for CRM Inbound BUAG_MAIN - corresponding standard FMs are marked for call.
    Any ideas?
    Thanks in advance.
    BR,
    Evgenia

  • Added custom screen in PO using BADI ME_GUI_PO_CUST and ME_PROCESS_PO_CUST

    Hi All,
    I have added custom screen with two z fields at item level using BADI ME_GUI_PO_CUST and ME_PROCESS_PO_CUST i can see my screen in tcodes ME21N , ME22N , ME23N but I am not able to save data.
    and also screen is coming in change mode even in ME23N .
    thanks.

    Hi,
    I have added two xfields at item level.
    This is the code i have added in zimplementation ZME_GUI_PO_CUST .
    IN Zimplementation ME_PROCESS_PO_CUST I have added code only in method FIELDSELECTION_ITEM . after doing this I can see only screens in ME21N, ME22N, ME23N but when enter data in zfields and trying to save it is giving me message no data has changed.
    method IF_EX_ME_GUI_PO_CUST~SUBSCRIBE.
    DATA: ls_subscriber LIKE LINE OF re_subscribers.
    we want to add a customer subscreen on the item detail tab
      CHECK im_application = 'PO'.
      CHECK im_element     = 'ITEM'.
    each line in re_subscribers generates a subscreen. We add one subscreen in this example
      CLEAR re_subscribers[].
    the name is a unique identifier for the subscreen and defined in this class definition
      ls_subscriber-name = subscreen1.
    the dynpro number to use
      ls_subscriber-dynpro = '0001'.
    the program where the dynpro can be found
      ls_subscriber-program = 'SAPLYMEPOBADIEX'.
    each subscreen needs his own DDIC-Structure
      ls_subscriber-struct_name = 'MEPO_BADI_STRUCT'.
    a label can be defined
      ls_subscriber-label = text-001.
    the position within the tabstrib can be defined
      ls_subscriber-position = 4.
    the height of the screen can be defined here. Currently we suport two screen sizes:
    value <= 7 a sevel line subscreen
    value > 7  a 16 line subscreen
      ls_subscriber-height = 7.
      APPEND ls_subscriber TO re_subscribers.
      ENDIF.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL.
      DATA: l_item       TYPE REF TO if_purchase_order_item_mm,
            ls_mepoitem  TYPE mepoitem,
            ls_customer  TYPE mepo_badi_exampl.
    system asks to transport data from the business logic into the view
      CASE im_name.
        WHEN subscreen1.
    is it an item? im_model can be header or item.
          mmpur_dynamic_cast l_item im_model.
          CHECK NOT l_item IS INITIAL.
    transport standard fields
          ls_mepoitem = l_item->get_data( ).
    transport customer fields
          CALL FUNCTION 'YMEPOBADIEX_GET_DATA'
            EXPORTING
              im_ebeln = ls_mepoitem-ebeln
              im_ebelp = ls_mepoitem-ebelp
            IMPORTING
              ex_data  = ls_customer.
    store info for later use
          MOVE-CORRESPONDING ls_mepoitem TO dynp_data_pbo.
          MOVE ls_customer-badi_bsgru TO dynp_data_pbo-badi_bsgru.
          MOVE ls_customer-badi_afnam TO dynp_data_pbo-badi_afnam.
        WHEN OTHERS.
      ENDCASE.
    endif.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP.
      CASE im_name.
        WHEN subscreen1.
          CALL FUNCTION 'YMEPOBADIEX_PUSH'
            EXPORTING
              im_dynp_data = dynp_data_pbo.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    endmethod.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP.
      CASE im_name.
        WHEN subscreen1.
          CALL FUNCTION 'YMEPOBADIEX_POP'
            IMPORTING
              ex_dynp_data = dynp_data_pai.
          IF dynp_data_pai NE dynp_data_pbo.
    something has changed therefor we have to notify the framework
    to transport data to the model
            re_changed = mmpur_yes.
          ENDIF.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    endmethod.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL.
    DATA: l_item       TYPE REF TO if_purchase_order_item_mm,
            ls_mepoitem  TYPE mepoitem,
            ls_customer  TYPE mepo_badi_exampl.
    data have to be transported to business logic
      CASE im_name.
        WHEN subscreen1.
    is it an item? im_model can be header or item.
          mmpur_dynamic_cast l_item im_model.
          CHECK NOT l_item IS INITIAL.
          ls_mepoitem = l_item->get_data( ).
    standard fields changed?
         IF dynp_data_pbo-matkl NE dynp_data_pai-matkl OR
            dynp_data_pbo-plifz NE dynp_data_pai-plifz OR
            dynp_data_pbo-webaz NE dynp_data_pai-webaz.
    update standard fields
           ls_mepoitem-matkl = dynp_data_pai-matkl.
           ls_mepoitem-plifz = dynp_data_pai-plifz.
           ls_mepoitem-webaz = dynp_data_pai-webaz.
            CALL METHOD l_item->set_data( ls_mepoitem ).
         ENDIF.
            CALL FUNCTION 'YMEPOBADIEX_GET_DATA'
              EXPORTING
                im_ebeln = ls_mepoitem-ebeln
                im_ebelp = ls_mepoitem-ebelp
              IMPORTING
                ex_data  = ls_customer.
            ls_customer-badi_bsgru = dynp_data_pai-badi_bsgru.
            ls_customer-badi_afnam = dynp_data_pai-badi_afnam.
            CALL FUNCTION 'YMEPOBADIEX_SET_DATA'
              EXPORTING
                im_data = ls_customer.
         ENDIF.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM.
    DATA: l_persistent TYPE mmpur_bool.
    CONSTANTS:
    FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.
    l_persistent = im_item->is_persistent( ).
    *IF l_persistent EQ mmpur_yes.
    READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY
                         metafield = MMMFD_YYMAN_NUM."fd_cust_01.
    IF sy-subrc IS INITIAL.
    <fs>-fieldstatus = '*'. " Display <-- this one was as per the sample code given.
    <fs>-fieldstatus = '+'. " Input <-- this i added to make the field mandatory.
    ENDIF.
    READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY
                         metafield = MMMFD_YYMAN_DES."fd_cust_01.
    IF sy-subrc IS INITIAL.
    <fs>-fieldstatus = '*'. " Display <-- this one was as per the sample code given.
    <fs>-fieldstatus = '+'. " Input <-- this i added to make the field mandatory.
    ENDIF.
    *ENDIF.
    ENDIF.
    endmethod.

  • Custom JPanel won't display

    I am building a GUI in NetBeans and am running into some trouble. I have created a class that extends JPanel that I wish to display in a tabbed pane. When I add it to the tabbed pane in the GUI Builder, it adds, although it doesn't display its elements. When I run it, it doesn't display at all. I have stepped through it in the debugger, and the constructor is executed just fine. I don't want to post a bunch of code just yet, because I imagine my problem is something simple. What is the best way to create a custom JPanel like this and add it to another JPanel?

    JPanel jp = new JPanel();
    myJPanel mp = new myJPanel();
    mp.add(mp);The first thing I'll tell you is to check your code for empty catch's.

  • How to run custom BSP application in UI frame work.

    Hi,
    Can you please tell me how to run custom BSP application in UI frame work.
    I have copied CRM_UI_FRAME application into ZCRM_UI_FRAME. Now if i am trying to test this particular application but in URL of IE i am able to see that its always calling CRM_UI_FRAME application.
    Can any body help me out in this?
    Rgds,
    Jat.

    Hi!
    You will find that and some other interesting stuff here
    https://websmp206.sap-ag.de/~form/sapnet?_FRAME=CONTAINER&_OBJECT=011000358700001006302007E
    The documents name is How-to Guide Framework Enhancements
    rollo
    Edited by: rollo on Aug 8, 2008 8:20 AM

Maybe you are looking for

  • Adobe applications hidden underneath Apple OS X menu bar. I can't move the application window.

    I cannot move the Photoshop application window. It is stuck/hidden underneath of the Apple OS X menu bar. I can't see the maximize, minimize, etc buttons and I cannot grab the frame of the window to drag it around the screen. Extremely frustrating. I

  • Appraisal Template ID  in which table

    Hi  Friends- In this standard report   RHXHAP_APP_DOC_PREPARE_ORG   one field Appraisal Template is ther  where it shows  8 digit   ID  number  , Now my i have two querys 1) In which table i can see this  Template ID number  as later i have to relat

  • What is going on with universal updater?!!!!!!

    hey i cant figure this out please anyone, i just got this ipod and im new to it... i was trying to update it because the little folder with a ! mark came up and thats what the troubleshooter said to do.. so i downloaded the universal updater and when

  • Cannot view Armenian font

    Hello Friends, I am using a blackberry 8310 and anytime I try to view Armenian text on the browser all I get is a blue, filled-in square. For example, if someone writes something in Armenian characters on Facebook and I go to view it, it will show up

  • IPAD connected to internet, but it says it's not.

    Searching for this seems to be a common problem, however none of the solutions have worked....Where is APPLE SUPPORT for this. If it's a common problem, then there should be an Apple common solution, not a bunch of hacks with their obvious solutions