Avatar billede hangaard Nybegynder
04. november 2004 - 16:21 Der er 1 kommentar og
1 løsning

Størrelser i Swing

Hej I kloge hoveder!

Jeg ka' ikke finde ud af det der med størrelser i Swing (minimumSize, maximumSize, preferredSize).

Jeg kan få hovedvinduet (framen) til at åbne op med den størrelse som alle dens komponenters preferredSizes giver tilsammen.
Det som jeg gerne vil ha' er, at vinduet ikke må kunne gøres mindre end denne størrelse, men det må gerne gøres større.

Er her nogen som kan hjælpe mig?


Hilsen
Hangaard
Avatar billede _carsten Nybegynder
04. november 2004 - 20:53 #1
Den nemmeste måde du kan gøre det på er at adde en ComponentListener til din
frame, (minimumSize, maximumSize, preferredSize) har ikke nogen effekt på en
frame, her skal du bruge setSize().


Eksempel

public class A2 extends javax.swing.JFrame {
   
    public A2() {
        initComponents();
    }

    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        label1 = new javax.swing.JLabel();
        frameWidth = new javax.swing.JTextField("400");
        label2 = new javax.swing.JLabel();
        frameHeight = new javax.swing.JTextField("400");

        getContentPane().setLayout(new java.awt.GridBagLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
       
       
        /* Tilføj følgende metode til din JFrame og ret metoden til så passer dig
        * Du kan jo eventuelt minimere den til kun at indeholde setSize()
        *
        * Altså:
        *    public void componentResized(java.awt.event.ComponentEvent evt) {
        *        setSize(new java.awt.Dimension( 400 , 400));
        *    }
        *
        * men af test hensyn ser den sådan ud.
        */   
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                try{
                    int w = Integer.parseInt(frameWidth.getText());
                    int h = Integer.parseInt(frameHeight.getText());

                    int newW = getWidth() > w ? getWidth() : w;
                    int newH = getHeight() > h ? getHeight() : h;
                    setSize(new java.awt.Dimension( newW , newH));
                }
                catch (NumberFormatException n ){

                }
            }
        });

        label1.setText("Set min. width");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(label1, gridBagConstraints);

        frameWidth.setColumns(10);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.ipadx = 40;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(frameWidth, gridBagConstraints);

        label2.setText("Set min. height");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(label2, gridBagConstraints);

        frameHeight.setColumns(10);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.ipadx = 40;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(frameHeight, gridBagConstraints);

        pack();
    }

   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new A2().setVisible(true);
            }
        });
    }

    private javax.swing.JTextField frameHeight;
    private javax.swing.JTextField frameWidth;
    private javax.swing.JLabel label1;
    private javax.swing.JLabel label2; 
}
Avatar billede hangaard Nybegynder
04. november 2004 - 23:08 #2
Hej Carsten,

Tak for dit svar!

Det virker ikke som om, at det at lukke for at et vindue kan gøres mindre end en bestemt størrelse, er en standard inden for GUI-verdenen, når det skal gøres via en ComponentListener.

Da min applikation helst skal følge skik og brug, må jeg hellere lade brugeren minimere vinduet så tosset han vil.

Men nu ved jeg hvordan det kan gøres, så jeg kan bruge det en anden god gang.

Mvh.
hangaard
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester