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
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;
}
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