JFrame Resize Issues

Discussion in 'Java' started by casey.lutz@gmail.com, Jun 29, 2005.

  1. Guest

    My java application currently checks frame resizing and if necessary
    resizes the frame in order to keep an aspect ratio. Testing this on
    Windows with undecorated frames works perfectly, as the user can resize
    the frame to their heart's content, and then once they release the
    mouse the frame will resize to an aspect ratio. However, when I set
    the JFrames to "Decorated" the user has to battle their resizing with
    the automatic aspect ratio resizer.

    My application needs to be able to run in all sorts of window managers
    and behave the same way, so I'm wondering if I'm missing something in
    how to control the resizing behavior.

    My code for checking resize is simply:

    public void componentResized( ComponentEvent evt ) {
    resizeVideo();
    }

    Any help you could give would be greatly appreciated, Thanks.
     
    , Jun 29, 2005
    #1
    1. Advertising

  2. Joan Guest

    <> wrote in message
    news:...
    > My java application currently checks frame resizing and if necessary
    > resizes the frame in order to keep an aspect ratio. Testing this on
    > Windows with undecorated frames works perfectly, as the user can resize
    > the frame to their heart's content, and then once they release the
    > mouse the frame will resize to an aspect ratio. However, when I set
    > the JFrames to "Decorated" the user has to battle their resizing with
    > the automatic aspect ratio resizer.
    >
    > My application needs to be able to run in all sorts of window managers
    > and behave the same way, so I'm wondering if I'm missing something in
    > how to control the resizing behavior.
    >
    > My code for checking resize is simply:
    >
    > public void componentResized( ComponentEvent evt ) {
    > resizeVideo();
    > }
    >
    > Any help you could give would be greatly appreciated, Thanks.


    layoutManager = null;
     
    Joan, Jun 30, 2005
    #2
    1. Advertising

  3. Joan wrote:
    >>Any help you could give would be greatly appreciated, Thanks.

    >
    >
    > layoutManager = null;


    Patient: Doctor, doctor, I have such pain in my stomach!
    Doctor: Cut off one of your legs.

    To the OP:

    Please provide us with more information. I have done this some time ago
    with no problem. What do you mean with "has to fight"? Please provide
    short(!) complete(!) (compiles and runs as provided) source code
    demonstrating your problem. Please tell us your Java version and the
    platform/OS.

    /Thomas


    --
    The comp.lang.java.gui FAQ:
    ftp://ftp.cs.uu.nl/pub/NEWS.ANSWERS/computer-lang/java/gui/faq
    http://www.uni-giessen.de/faq/archiv/computer-lang.java.gui.faq/
     
    Thomas Weidenfeller, Jun 30, 2005
    #3
  4. Guest

    Oh boy, um... providing compilable source code for this problem may
    span quite a few pages. I'll start by explaining what I mean by
    "fight".

    When I have the frames undecorated, I believe the Java VM uses
    Windows(r) own Window Manager (Windows2000/XP is what I am developing
    on). In this case, the componentResized() event is issued when the
    user has completed resizing the frame. However, when I switch to
    Decorated frames, the Java VM issues componentResized() while the user
    is still resizing (like every couple of pixels that they move it).

    When a resize is called, I basically call a function: resizeVideo()
    which checks to see if aspect ratio is enabled and if it is resizes the
    window based on the aspect ratio.

    if ( ControlAspect.getText().equals( "Aspect Off" ) ) {
    if ( newHeight != oldHeight || newWidth != oldWidth ) {
    // Keep aspect ratio
    if ( java.lang.Math.abs( oldHeight - newHeight ) >=
    java.lang.Math.abs( oldWidth - newWidth ) ) {
    oldHeight = newHeight;
    inHeight = oldHeight - diffHeight;
    inWidth = ( int ) ( ratio * ( ( float ) inHeight ) );
    oldWidth = inWidth + diffWidth;
    }
    else {
    oldWidth = newWidth;
    inWidth = oldWidth - diffWidth;
    inHeight = ( int ) ( ( ( float ) inWidth ) / ratio );
    oldHeight = inHeight + diffHeight;
    }
    if ( fvmain.debug2 ) {
    System.out.println( "ratio: " + ratio );
    }
    }
    this.setSize( oldWidth, oldHeight );
    }

    Currently the layoutManager is set to BorderLayout. I'm using Borland
    JBuilder X with JDK 4. The reason that I'm using BorderLayout is
    because I have two components in this window, a bar which basically
    contains a row of buttons (which act as sort of a graphical menu bar)
    and a JPanel that acts as a drawing canvas.

    Here's to hoping this is enough information. If you need more I'll be
    happy to comply. Thank you.
     
    , Jun 30, 2005
    #4
  5. On 30 Jun 2005 05:52:46 -0700, wrote:

    > Oh boy, um... providing compilable source code for this problem may
    > span quite a few pages.


    Really? What if you stripped all the video stuff from it
    and represent the space it occupies with a brightly colored
    Container instead. (You did think of that, right?)

    --
    Andrew Thompson
    http://www.PhySci.org/codes/ Web & IT Help
    http://www.PhySci.org/ Open-source software suite
    http://www.1point1C.org/ Science & Technology
    http://www.LensEscapes.com/ Images that escape the mundane
     
    Andrew Thompson, Jun 30, 2005
    #5
  6. Guest

    Well, the problem is the... well, okay I'll do my best to produce
    something real quick.

    This is rather long. It works on JBuilder X. In this example, the
    videoGui works as intended, the componentResize is issued after the
    user has finished resizing. If, inside main() you issue a
    UIManager.setDefaultLookAndFeel( insert lookandfeel here ) and a
    javax.swing.JFrame.setDefaultLookAndFeelDecorated( true ); then you
    should see what I am talking about with the resizing issues.

    Finally, here's the code:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Random;

    public class videoGui
    extends JFrame
    implements ActionListener {
    public static videoGui videoControl;
    public int fvnumber; /* Ufg ProcId */
    public int mixernumber; /* Mixer ProcId */
    private int fvtype; /* ??? */
    private String fvtypeS; /* String for fvtype */

    private String titleString = "FV3 Control Window ";
    public String titleLabel = "";
    public String window_char;

    private int screenNum = 0;
    public int OffSetX = 0;
    public int OffSetY = 0;
    public Rectangle normalbounds = new Rectangle();
    public String popups = "centerscreen";

    // Window size values
    public int source_width;
    public int source_height;
    private Rectangle positRectangle;
    private int diffHeight;
    private int diffWidth;
    private int oldHeight;
    private int oldWidth;
    public float ratio;
    private boolean first_time = true;
    private boolean mouse_down = false;

    // Popup Menu Objects
    private JPopupMenu FileMenu;
    private JPopupMenu ControlMenu;
    private JPopupMenu AttributesMenu;
    private JPopupMenu InfoMenu;
    private JPopupMenu MixingMenu;
    private JPopupMenu MixerMenu;
    private JPopupMenu HelpMenu;

    // Generic Separator
    private JSeparator Separator;

    // Menu Selections for FileMenu
    private JMenuItem FileCapture;
    private JMenuItem FilePlayback;
    private JMenuItem FileFullScreenCapture;
    private JMenuItem FileHistory;
    private JMenuItem FileHide;
    private JMenuItem FileClose;

    // Menu Selections for ControlMenu
    private JMenuItem ControlSource;
    public JMenuItem ControlOff;
    public JMenuItem ControlFreezeIn;
    public JMenuItem ControlFreezeOut;
    public JMenuItem ControlAspect;
    private JMenuItem ControlReset;

    // Menu Selections for AttributesMenu
    private JMenuItem AttributesColor;
    private JMenuItem AttributesZoom;
    private JMenuItem AttributesZoomValue;
    private JMenuItem AttributesSharpness;
    private JMenuItem AttributesAlign;
    private JMenuItem AttributesSignalListing;

    // Menu Selections for MixingMenu
    private JMenuItem MixingKeyingMode;
    private JMenuItem MixingChroma;
    private JMenuItem MixingTransparency;
    private JMenuItem MixingAlpha;

    // Menu Selections for MixerMenu
    private JMenuItem MixerColor;
    private JMenuItem MixerBypass;
    private JMenuItem MixerGenLock;
    private JMenuItem MixerReset;
    private JMenuItem MixerAlign;
    private JMenuItem MixerSignalListing;

    // Menu Selections for InfoMenu
    private JMenuItem InfoHardware;
    private JMenuItem InfoLabel;

    // Menu Selections for Help Menu
    private JMenuItem HelpSettings;
    private JMenuItem HelpAbout;

    // Create objects inside the video gui
    public GUICanvas videoCanvas;
    private JPanel forButtons;
    private JButton FileButton;
    private JButton ControlButton;
    private JButton AttributesButton;
    private JButton InfoButton;
    private JButton MixingButton;
    private JButton MixerButton;
    private JButton HelpButton;

    private JMenuBar topPanel;


    public videoGui(int ufg, int mix) {
    fvnumber = ufg;
    mixernumber = mix;
    initGUI();
    }

    static public void main(String[] args) {
    videoControl = new videoGui(0, 0);
    }

    private void initGUI() {
    GetInfo();
    makeTheObjects();
    createMenuBar();
    doTheLayout();

    // Set up ActionListeners
    this.addKeyListener(new KeyListener() {
    public void keyPressed(KeyEvent ke) {
    switch (ke.getKeyCode()) {
    case KeyEvent.VK_ESCAPE:

    // Do Unzoom.

    break;
    case KeyEvent.VK_B:
    case KeyEvent.VK_H:
    if (ke.isControlDown()) {
    }
    break;
    case KeyEvent.VK_Z:
    if (ke.isControlDown()) {
    }
    break;
    case KeyEvent.VK_S:
    if (ke.isControlDown()) {
    }
    break;
    case KeyEvent.VK_C:
    if (ke.isControlDown()) {
    }
    break;
    case KeyEvent.VK_A:
    if (ke.isControlDown()) {
    if (ControlAspect.getText().equals("Aspect Off")) {
    ControlAspect.setText("Aspect On");
    }
    else {
    ControlAspect.setText("Aspect Off");
    int inWidth = oldWidth - diffWidth;
    int inHeight = (int) ( ( (float) inWidth) / ratio);
    oldHeight = inHeight + diffHeight;
    setSize(oldWidth, oldHeight);
    setPortPosition();
    }
    }
    }
    }

    public void keyReleased(KeyEvent ke) {
    }

    public void keyTyped(KeyEvent ke) {
    }

    });
    this.setFocusable(true);

    this.addComponentListener(new ComponentAdapter() {
    public void componentHidden(ComponentEvent evt) {

    }

    public void componentMoved(ComponentEvent evt) {
    setPortPosition();
    }

    public void componentResized(ComponentEvent evt) {
    resizeVideo();
    setPortPosition();
    }

    public void componentShown(ComponentEvent evt) {
    checkIfOn();
    resizeVideo();
    setPortPosition();
    }
    });

    this.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent evt) {
    saveHistory();
    hideVideoJPanel();
    closeout();
    }

    public void windowClosed(WindowEvent evt) {
    hideVideoJPanel();
    closeout();
    }

    public void windowDeiconified(WindowEvent evt) {
    checkIfOn();
    setPortPosition();
    }

    public void windowIconified(WindowEvent evt) {
    }

    public void windowActivated(WindowEvent evt) {
    setPortPosition();
    }

    public void windowDeactivated(WindowEvent evt) {
    }

    public void windowOpened(WindowEvent evt) {
    checkIfOn();
    setPortPosition();
    }
    });

    MouseListener FileListener = new FilePopupListener();
    FileButton.addMouseListener(FileListener);

    MouseListener ControlListener = new ControlPopupListener();
    ControlButton.addMouseListener(ControlListener);

    MouseListener AttributesListener = new AttributesPopupListener();
    AttributesButton.addMouseListener(AttributesListener);

    MouseListener InfoListener = new InfoPopupListener();
    InfoButton.addMouseListener(InfoListener);

    MouseListener MixingListener = new MixingPopupListener();
    MixingButton.addMouseListener(MixingListener);

    MouseListener MixerListener = new MixerPopupListener();
    MixerButton.addMouseListener(MixerListener);

    MouseListener HelpListener = new HelpPopupListener();
    HelpButton.addMouseListener(HelpListener);
    }

    class FilePopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    FileMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class ControlPopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    //ControlMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    ControlMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class AttributesPopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    //AttributesMenu.show(evt.getComponent(), evt.getX(),
    evt.getY());
    AttributesMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class InfoPopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    //InfoMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    InfoMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class MixingPopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    //MixingMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    MixingMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class MixerPopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    //MixingMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    MixerMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class HelpPopupListener
    extends MouseAdapter {
    public void mouseReleased(MouseEvent evt) {
    if ( (evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
    showPopup(evt);
    }
    }

    private void showPopup(MouseEvent evt) {
    //HelpMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    HelpMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    }
    }

    class FileButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    FileMenu.show(FileButton, FileButton.getX(), FileButton.getY());
    }
    }

    class ControlButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    ControlMenu.show(ControlButton, ControlButton.getX(),
    ControlButton.getY());
    }
    }

    class AttributesButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    AttributesMenu.show(AttributesButton, AttributesButton.getX(),
    AttributesButton.getY());
    }
    }

    class MixingButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    MixingMenu.show(MixingButton, MixingButton.getX(),
    MixingButton.getY());
    }
    }

    class MixerButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    MixerMenu.show(MixerButton, MixerButton.getX(),
    MixerButton.getY());
    }
    }

    class InfoButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    InfoMenu.show(InfoButton, InfoButton.getX(), InfoButton.getY());
    }
    }

    class HelpButtonListener
    implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
    HelpMenu.show(HelpButton, HelpButton.getX(), HelpButton.getY());
    }
    }

    public void lowerFrame() {
    this.toBack();
    }

    public void makeTheObjects() {
    /* Create the GUI's here */
    }

    public JMenuBar createMenuBar() {
    /* START SWING POPUP MENU */
    // Initialize top panel
    topPanel = new JMenuBar();

    FileButton = new JButton("File");
    FileButton.setActionCommand("FileButton");
    FileButton.addActionListener(new FileButtonListener());

    ControlButton = new JButton("File");
    ControlButton.setActionCommand("ControlButton");
    ControlButton.addActionListener(new ControlButtonListener());

    AttributesButton = new JButton("File");
    AttributesButton.setActionCommand("AttributesButton");
    AttributesButton.addActionListener(new AttributesButtonListener());

    InfoButton = new JButton("File");
    InfoButton.setActionCommand("InfoButton");
    InfoButton.addActionListener(new InfoButtonListener());

    MixingButton = new JButton("File");
    MixingButton.setActionCommand("MixingButton");
    MixingButton.addActionListener(new MixingButtonListener());

    MixerButton = new JButton("File");
    MixerButton.setActionCommand("MixerButton");
    MixerButton.addActionListener(new MixerButtonListener());

    HelpButton = new JButton("File");
    HelpButton.setActionCommand("HelpButton");
    HelpButton.addActionListener(new HelpButtonListener());

    forButtons = new JPanel();
    forButtons.setLayout(new GridLayout(1, 7, 0, 0));
    forButtons.add(FileButton);
    forButtons.add(ControlButton);
    forButtons.add(AttributesButton);
    forButtons.add(MixingButton);
    forButtons.add(MixerButton);
    forButtons.add(InfoButton);
    forButtons.add(HelpButton);

    // Initialize Popup Menus
    FileMenu = new JPopupMenu("File");
    ControlMenu = new JPopupMenu("Control");
    AttributesMenu = new JPopupMenu("Attributes");
    InfoMenu = new JPopupMenu("Information");
    MixingMenu = new JPopupMenu("Mixing");
    MixerMenu = new JPopupMenu("Mixer");
    HelpMenu = new JPopupMenu("Help");

    // Create Menu Items

    // File Menu

    FileCapture = new JMenuItem("File");
    FileCapture.addActionListener(this);
    FileCapture.setActionCommand("Capture");
    FileMenu.add(FileCapture);

    FilePlayback = new JMenuItem("File");
    FilePlayback.addActionListener(this);
    FilePlayback.setActionCommand("Playback");
    FileMenu.add(FilePlayback);

    FileFullScreenCapture = new JMenuItem("File");
    FileFullScreenCapture.addActionListener(this);
    FileFullScreenCapture.setActionCommand("FullScreenCapture");
    FileMenu.add(FileFullScreenCapture);

    FileHistory = new JMenuItem("File");
    FileHistory.addActionListener(this);
    FileHistory.setActionCommand("History");
    FileMenu.add(FileHistory);

    Separator = new JSeparator();
    FileMenu.add(Separator);

    FileHide = new JMenuItem("File");
    FileHide.addActionListener(this);
    FileHide.setActionCommand("Hide");
    FileMenu.add(FileHide);

    FileClose = new JMenuItem("File");
    FileClose.addActionListener(this);
    FileClose.setActionCommand("Close");
    FileMenu.add(FileClose);

    forButtons.add(FileMenu);

    // Control Menu
    ControlSource = new JMenuItem("File");
    ControlSource.addActionListener(this);
    ControlSource.setActionCommand("Source");
    ControlMenu.add(ControlSource);

    ControlOff = new JMenuItem("File");
    ControlOff.addActionListener(this);
    ControlOff.setActionCommand("Off");
    ControlMenu.add(ControlOff);

    ControlFreezeIn = new JMenuItem("File");
    ControlFreezeIn.addActionListener(this);
    ControlFreezeIn.setActionCommand("FreezeIn");
    ControlMenu.add(ControlFreezeIn);

    ControlFreezeOut = new JMenuItem("File");
    ControlFreezeOut.addActionListener(this);
    ControlFreezeOut.setActionCommand("FreezeOut");
    ControlMenu.add(ControlFreezeOut);

    ControlAspect = new JMenuItem("File");
    ControlAspect.addActionListener(this);
    ControlAspect.setActionCommand("Aspect");
    ControlMenu.add(ControlAspect);

    ControlReset = new JMenuItem("File");
    ControlReset.addActionListener(this);
    ControlReset.setActionCommand("Reset");
    ControlMenu.add(ControlReset);

    forButtons.add(ControlMenu);

    // Attributes Menu
    AttributesColor = new JMenuItem("File");
    AttributesColor.addActionListener(this);
    AttributesColor.setActionCommand("Color");
    AttributesMenu.add(AttributesColor);

    AttributesZoom = new JMenuItem("File");
    AttributesZoom.addActionListener(this);
    AttributesZoom.setActionCommand("Zoom");
    AttributesMenu.add(AttributesZoom);

    AttributesZoomValue = new JMenuItem("File");
    AttributesZoomValue.addActionListener(this);
    AttributesZoomValue.setActionCommand("ZoomValue");
    AttributesMenu.add(AttributesZoomValue);

    AttributesSharpness = new JMenuItem("File");
    AttributesSharpness.addActionListener(this);
    AttributesSharpness.setActionCommand("Sharpness");
    AttributesMenu.add(AttributesSharpness);

    AttributesAlign = new JMenuItem("File");
    AttributesAlign.addActionListener(this);
    AttributesAlign.setActionCommand("Align");
    AttributesMenu.add(AttributesAlign);

    AttributesSignalListing = new JMenuItem("File");
    AttributesSignalListing.addActionListener(this);
    AttributesSignalListing.setActionCommand("SignalListing");
    AttributesMenu.add(AttributesSignalListing);

    forButtons.add(AttributesMenu);

    //Information Menu
    InfoHardware = new JMenuItem("File");
    InfoHardware.addActionListener(this);
    InfoHardware.setActionCommand("Hardware");
    InfoMenu.add(InfoHardware);

    InfoLabel = new JMenuItem("File");
    InfoLabel.addActionListener(this);
    InfoLabel.setActionCommand("Label");
    InfoMenu.add(InfoLabel);

    forButtons.add(InfoMenu);

    // Mixing Menu
    MixingKeyingMode = new JMenuItem("File");
    MixingKeyingMode.addActionListener(this);
    MixingKeyingMode.setActionCommand("KeyingMode");
    MixingMenu.add(MixingKeyingMode);

    MixingChroma = new JMenuItem("File");
    MixingChroma.addActionListener(this);
    MixingChroma.setActionCommand("Chroma");
    MixingMenu.add(MixingChroma);

    MixingTransparency = new JMenuItem("File");
    MixingTransparency.addActionListener(this);
    MixingTransparency.setActionCommand("Transparency");
    MixingMenu.add(MixingTransparency);

    MixingAlpha = new JMenuItem("File");
    MixingAlpha.addActionListener(this);
    MixingAlpha.setActionCommand("Alpha");
    MixingMenu.add(MixingAlpha);

    forButtons.add(MixingMenu);

    // Mixer Menu

    MixerColor = new JMenuItem("File");
    MixerColor.addActionListener(this);
    MixerColor.setActionCommand("MixerColor");
    MixerMenu.add(MixerColor);

    MixerBypass = new JMenuItem("File");
    MixerBypass.addActionListener(this);
    MixerBypass.setActionCommand("MixerBypass");
    MixerMenu.add(MixerBypass);

    MixerGenLock = new JMenuItem("File");
    MixerGenLock.addActionListener(this);
    MixerGenLock.setActionCommand("GenLock");
    MixerMenu.add(MixerGenLock);

    MixerReset = new JMenuItem("File");
    MixerReset.addActionListener(this);
    MixerReset.setActionCommand("MixerReset");
    MixerMenu.add(MixerReset);

    MixerAlign = new JMenuItem("File");
    MixerAlign.addActionListener(this);
    MixerAlign.setActionCommand("MixerAlign");
    MixerMenu.add(MixerAlign);

    MixerSignalListing = new JMenuItem("File");
    MixerSignalListing.addActionListener(this);
    MixerSignalListing.setActionCommand("MixerSignalListing");
    MixerMenu.add(MixerSignalListing);

    // Help Menu
    HelpSettings = new JMenuItem("File");
    HelpSettings.addActionListener(this);
    HelpSettings.setActionCommand("Settings");
    HelpMenu.add(HelpSettings);

    HelpAbout = new JMenuItem("File");
    HelpAbout.addActionListener(this);
    HelpAbout.setActionCommand("About");
    HelpMenu.add(HelpAbout);

    forButtons.add(HelpMenu);

    // Add in Menus to the top panel.
    topPanel.add(FileMenu);
    topPanel.add(ControlMenu);
    topPanel.add(AttributesMenu);
    topPanel.add(InfoMenu);
    topPanel.add(MixingMenu);
    topPanel.add(MixerMenu);
    topPanel.add(HelpMenu);

    return topPanel;
    /* END SWING POPUP MENU */
    }

    private void doTheLayout() {
    videoCanvas = new GUICanvas(this);
    videoCanvas.setSize(source_width, source_height);
    // videoCanvas.setOpaque( false );
    videoCanvas.setOpaque(true);

    this.getContentPane().setLayout(new BorderLayout());

    this.getContentPane().add(videoCanvas, "Center");
    this.getContentPane().add(forButtons, "South");
    this.setSize(source_width, source_height);

    // this.getContentPane().setBackground( new java.awt.Color( 0, 0, 0
    ) );

    String popupBehavior = "centerscreen";
    popups = popupBehavior;
    }

    private void SetTopWindow(int val) {
    if (ControlOff.getText().equals("Off")) {
    // Tell it to set me to the top window.
    }
    }

    public void setPortPosition() {
    Point newLoc;
    positRectangle = getBounds();

    if (ControlOff.getText().equals("Off")) {
    if (this.isVisible()) {
    newLoc = videoCanvas.getLocationOnScreen();
    }
    else {
    newLoc = new Point(0, 0);
    }
    int AbsoluteX = newLoc.x - OffSetX;
    int AbsoluteY = newLoc.y - OffSetY;
    //fvmain.SetLocation( fvnumber, AbsoluteX, AbsoluteY );
    }
    }

    private void resizeVideo() {
    int newWidth = this.getWidth();
    int newHeight = this.getHeight();
    int vidWidth = videoCanvas.getWidth();
    int vidHeight = videoCanvas.getHeight();
    int inHeight;
    int inWidth;

    if (first_time) {
    oldHeight = newHeight;
    oldWidth = newWidth;
    diffHeight = oldHeight - vidHeight;
    diffWidth = oldWidth - vidWidth;
    oldHeight = source_height + diffHeight;
    oldWidth = source_width + diffWidth;

    newHeight = oldHeight;
    newWidth = oldWidth;

    first_time = false;
    }

    if (ControlAspect.getText().equals("Aspect Off")) {
    if (newHeight != oldHeight || newWidth != oldWidth) {
    // Keep aspect ratio
    if (java.lang.Math.abs(oldHeight - newHeight) >=
    java.lang.Math.abs(oldWidth - newWidth)) {
    oldHeight = newHeight;
    inHeight = oldHeight - diffHeight;
    inWidth = (int) (ratio * ( (float) inHeight));
    oldWidth = inWidth + diffWidth;
    }
    else {
    oldWidth = newWidth;
    inWidth = oldWidth - diffWidth;
    inHeight = (int) ( ( (float) inWidth) / ratio);
    oldHeight = inHeight + diffHeight;
    }
    }
    this.setSize(oldWidth, oldHeight);
    }
    else {
    oldHeight = newHeight;
    oldWidth = newWidth;
    }
    //fvmain.SetSize( fvnumber, this.videoCanvas.getWidth(),
    this.videoCanvas.getHeight() );
    }

    private void closeout() {
    System.exit(0);
    }

    public void SetString() {
    switch (fvtype) {
    case 0:
    fvtypeS = "RGB";
    break;
    case 1:
    fvtypeS = "CVBS";
    break;
    case 2:
    fvtypeS = "Monochrome";
    break;
    default:
    fvtypeS = "Unknown Type";
    break;
    }
    }

    public void GetInfo() {
    SetString();
    source_width = 640;
    source_height = 480;
    this.setTitle("FlexiVision 3 - Board " + fvnumber + " " + fvtypeS);
    ratio = ( (float) source_width) / ( (float) source_height);
    }

    public void setTitles(String label) {
    }

    private void hideVideoJPanel() {
    this.setVisible(false);
    }

    private void hideWindows(int test) {
    }

    private void checkIfOn() {
    }

    public void loadHistory() {
    }

    private void saveHistory() {
    // Gather various information and save it for later retrieval.
    // Get size and position (relative to offset)
    }

    public void window_popup_location(JDialog window) {
    if (popups.equals("centerscreen")) {
    window.setLocation( (int) (normalbounds.getWidth() / 2 -
    window.getWidth() / 2) + OffSetX,
    (int) (normalbounds.getHeight() / 2 -
    window.getHeight() / 2) + OffSetY);
    }
    else if (popups.equals("upperleft")) {
    window.setLocation(OffSetX, OffSetY);
    }
    else if (popups.equals("centerowner")) {
    window.setLocation(this.getWidth() / 2 - window.getWidth() / 2 +
    this.getX(),
    this.getHeight() / 2 - window.getHeight() / 2
    +
    this.getY());
    }
    else {
    window.setLocation(OffSetX, OffSetY);
    }
    }

    public void window_popup_location(JFrame window) {
    if (popups.equals("centerscreen")) {
    window.setLocation( (int) (normalbounds.getWidth() / 2 -
    window.getWidth() / 2) + OffSetX,
    (int) (normalbounds.getHeight() / 2 -
    window.getHeight() / 2) + OffSetY);
    }
    else if (popups.equals("upperleft")) {
    window.setLocation(OffSetX, OffSetY);
    }
    else if (popups.equals("centerowner")) {
    window.setLocation(this.getWidth() / 2 - window.getWidth() / 2 +
    this.getX(),
    this.getHeight() / 2 - window.getHeight() / 2
    +
    this.getY());
    }
    else {
    window.setLocation(OffSetX, OffSetY);
    }
    }

    public void window_popup_location(Frame window) {
    if (popups.equals("centerscreen")) {
    window.setLocation( (int) (normalbounds.getWidth() / 2 -
    window.getWidth() / 2) + OffSetX,
    (int) (normalbounds.getHeight() / 2 -
    window.getHeight() / 2) + OffSetY);
    }
    else if (popups.equals("upperleft")) {
    window.setLocation(OffSetX, OffSetY);
    }
    else if (popups.equals("centerowner")) {
    window.setLocation(this.getWidth() / 2 - window.getWidth() / 2 +
    this.getX(),
    this.getHeight() / 2 - window.getHeight() / 2
    +
    this.getY());
    }
    else {
    window.setLocation(OffSetX, OffSetY);
    }
    }

    public void actionPerformed(ActionEvent evt) {
    }

    // First panel which opens Video Panel
    public class GUICanvas
    extends JComponent
    implements MouseListener, MouseMotionListener {

    private String msg = "";
    public int mouseX = 0;
    public int mouseY = 0;
    public int prevX = 0;
    public int prevY = 0;
    private boolean drawRect = false;
    private boolean doPan = false;
    private boolean unzoom = false;
    public boolean rubberBand = true;
    public Color canvasColor = new java.awt.Color(0, 0, 0);
    private String theColor = "";
    private videoGui videowindow;
    private int drawX, drawY, drawWidth, drawHeight;

    public void GUICanvas(Graphics g) {
    this.paintComponent(g);
    repaint();
    addMouseListener(this);
    addMouseMotionListener(this);

    }

    public GUICanvas(videoGui v) {
    videowindow = v;
    repaint();
    addMouseListener(this);
    addMouseMotionListener(this);
    }

    public void mouseClicked(MouseEvent me) {
    // Save Coords
    mouseX = 0;
    mouseY = 10;
    msg = "Mouse clicked.";
    drawRect = false;
    doPan = false;
    if (me.getModifiers() == InputEvent.BUTTON3_MASK) {
    unzoom = true;
    }
    videowindow.requestFocus();
    repaint();
    }

    public void mouseEntered(MouseEvent me) { // Save Coordinates
    mouseX = 0;
    mouseY = 10;
    msg = "Mouse entered.";
    if (rubberBand) {

    this.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.
    CROSSHAIR_CURSOR));
    }
    repaint();
    }

    public void mouseExited(MouseEvent me) {
    mouseX = 0;
    mouseY = 10;
    msg = "Mouse Exited.";

    this.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.
    DEFAULT_CURSOR));
    repaint();
    }

    public void mousePressed(MouseEvent me) {
    prevX = me.getX();
    prevY = me.getY();
    msg = "Down.";
    repaint();
    }

    public void mouseReleased(MouseEvent me) {
    mouseX = me.getX();
    mouseY = me.getY();
    msg = "Up.";
    if (drawRect == true) {
    System.out.println("Zooming...");
    drawRect = false;
    }
    doPan = false;
    unzoom = false;

    this.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.
    CROSSHAIR_CURSOR));
    repaint();
    prevX = 0;
    prevY = 0;
    }

    public void mouseDragged(MouseEvent me) {
    mouseX = me.getX();
    mouseY = me.getY();
    msg = "* Dragging mouse at " + mouseX + ", " + mouseY;
    if (me.getModifiers() == InputEvent.BUTTON1_MASK) {
    drawRect = true;
    }
    else if (me.getModifiers() == InputEvent.BUTTON2_MASK) {
    doPan = true;

    this.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.
    MOVE_CURSOR));
    }
    else if (me.getModifiers() == InputEvent.BUTTON3_MASK) {
    unzoom = true;
    }

    repaint();
    }

    public void mouseMoved(MouseEvent me) {
    msg = "Moving mouse at " + me.getX() + ", " + me.getY();
    }

    public Color randomColor() {
    int randomR;
    int randomG;
    int randomB;
    Random generator = new Random();
    Color tempColor;

    randomR = generator.nextInt(256);
    randomG = generator.nextInt(256);
    randomB = generator.nextInt(256);

    tempColor = new java.awt.Color(randomR, randomG, randomB);

    return tempColor;
    }

    public void setParams(String newColor) {
    theColor = newColor;
    repaint();
    }

    public void paintComponent(Graphics g) {
    drawX = 0;
    drawY = 0;
    drawHeight = 0;
    drawWidth = 0;

    g.setColor(canvasColor);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    g.setColor(randomColor());

    if (rubberBand) {
    if (drawRect) {
    if (mouseY < this.getY()) {
    mouseY = 0;
    }
    if (mouseX < this.getX()) {
    mouseX = 0;
    }
    if (mouseY > this.getHeight()) {
    mouseY = this.getHeight() - 1;
    }
    if (mouseX > this.getWidth()) {
    mouseX = this.getWidth() - 1;
    }

    if (prevX < mouseX) {
    drawWidth = mouseX - prevX;
    drawX = prevX;
    }
    else {
    drawWidth = prevX - mouseX;
    drawX = mouseX;
    }
    if (prevY < mouseY) {
    drawHeight = mouseY - prevY;
    drawY = prevY;
    }
    else {
    drawHeight = prevY - mouseY;
    drawY = mouseY;
    }

    if ( (drawX + drawWidth) > this.getWidth()) {
    drawWidth = this.getWidth() - drawX - 1;
    }
    if ( (drawY + drawHeight) > this.getWidth()) {
    drawHeight = this.getHeight() - drawY - 1;
    }

    g.drawRect(drawX, drawY, drawWidth, drawHeight);
    }
    else if (doPan) {
    // Do pan code.
    System.out.println("Panning...");
    }
    else if (unzoom) {
    // Zoom to 0.
    unzoom = false;
    }
    }
    }
    }

    }
     
    , Jun 30, 2005
    #6
  7. On 30 Jun 2005 12:30:19 -0700, wrote:

    > Well, the problem is the... well, okay I'll do my best to produce
    > something real quick.


    That was pretty quick for around ..1000+(?!) lines of code!

    A couple of comments..

    You'd think after that amount of code, you might remember to..

    > static public void main(String[] args) {
    > videoControl = new videoGui(0, 0);


    videoControl.setVisible(true);

    > }


    Otherwise it is pretty boring.

    What is the point of the 'mouse selection box'? Is
    that necessary to demonstrate the problem? Did I miss
    something?

    And.. We need to be able to distinguish the corners of
    the 'video window', (I take it that is the basic nature
    of the component for which you want to maintain the
    aspect ratio) so perhaps you need to draw a red 'x'
    or a line from upper left to lower right of that
    target component.

    In the SOUTH you have a complex structure of buttons and
    menus, does that demonstrate anything that a single text
    field (spanning the entire width) would not?

    I suspect you could trim this down to around 100-200
    lines of code, and while somebody else might do that
    in order to help you, you can also do it yourself
    and save them the trouble.

    Please be careful to keep the lines short, your code
    had to have lines reconstructed before it would compile .

    Finally. Please do not post such *long* code examples.

    --
    Andrew Thompson
    http://www.PhySci.org/codes/ Web & IT Help
    http://www.PhySci.org/ Open-source software suite
    http://www.1point1C.org/ Science & Technology
    http://www.LensEscapes.com/ Images that escape the mundane
     
    Andrew Thompson, Jun 30, 2005
    #7
  8. Guest

    My apologies. I was trying to leave as much as possible intact to lend
    as much information to the application as possible (in case I did
    something that was screwing things up). Also, the GUICanvas (the area
    in which you can draw that rectangle thing) is the area where video is
    to be shown.

    Again, I sincerely apologize for the incredibly long code sample (and
    the errors that were in it... oi...). If the topic is still up for
    discussion on Monday I will trim the code down considerably (I'm done
    looking at it for today).
     
    , Jun 30, 2005
    #8
  9. On 30 Jun 2005 13:30:28 -0700, wrote:

    > ..If the topic is still up for
    > discussion on Monday I will trim the code down considerably


    That sounds like a good course of action.
    [ Of course it would be nice to hear the basic strategy
    you took to achieve it, should that be the alternate
    outcome. ]

    > (I'm done looking at it for today).


    So am I. [ ;-) ]

    --
    Andrew Thompson
    http://www.PhySci.org/codes/ Web & IT Help
    http://www.PhySci.org/ Open-source software suite
    http://www.1point1C.org/ Science & Technology
    http://www.LensEscapes.com/ Images that escape the mundane
     
    Andrew Thompson, Jun 30, 2005
    #9
  10. wrote:
    > My apologies. I was trying to leave as much as possible intact to lend
    > as much information to the application as possible (in case I did
    > something that was screwing things up).


    A better approach is to eliminate as much as possible while still
    demonstrating the problem. Sometimes you will answer your own questions
    that way.

    > Also, the GUICanvas (the area
    > in which you can draw that rectangle thing) is the area where video is
    > to be shown.
    >
    > Again, I sincerely apologize for the incredibly long code sample (and
    > the errors that were in it... oi...). If the topic is still up for
    > discussion on Monday I will trim the code down considerably (I'm done
    > looking at it for today).
    >


    Ray

    --
    XML is the programmer's duct tape.
     
    Raymond DeCampo, Jul 1, 2005
    #10
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. kc
    Replies:
    3
    Views:
    8,360
  2. jakester
    Replies:
    3
    Views:
    1,836
    jakester
    Apr 3, 2007
  3. Replies:
    2
    Views:
    1,266
    Adrienne
    Feb 13, 2005
  4. Replies:
    2
    Views:
    418
    markspace
    Aug 27, 2012
  5. K

    JFrame issues

    K, Dec 3, 2012, in forum: Java
    Replies:
    3
    Views:
    356
    Arne Vajhøj
    Dec 4, 2012
Loading...

Share This Page