Dopo aver cercato per un po ', non ho potuto trovare soluzioni davvero soddisfacenti. Penso che il ridimensionamento del dialogo sia qualcosa che viene gestito direttamente a livello di sistema operativo e quindi puoi solo dire che lo vuoi totalmente non ridimensionabile o totalmente ridimensionabile.
Il codice seguente impedirà sempre che la finestra di dialogo sia più grande, ma mentre l'utente ridimensiona la finestra di dialogo, i bordi della finestra di dialogo si spostano ancora.
L'altra opzione, suggerita anche da radai, sarebbe impedire il ridimensionamento e impostare un riquadro del contenuto personalizzato con un listener del mouse che ascolti il mouse e ridimensiona di conseguenza. Tuttavia, penso che questo non si sentirà molto nativo per l'utente (non penso che sarete in grado di catturare gli eventi sul bordo della finestra di dialogo).
import java.awt.Frame;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JDialog;
import javax.swing.JRootPane;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
init();
}
});
}
public static void init() {
final int staticHeight = 150;
final JDialog dialog = new JDialog((Frame) null) {
@Override
protected JRootPane createRootPane() {
JRootPane rp = new JRootPane() {
@Override
public void reshape(int x, int y, int w, int h) {
super.reshape(x, y, w, staticHeight);
}
};
rp.setOpaque(true);
return rp;
}
@Override
public void reshape(int x, int y, int width, int height) {
super.reshape(x, y, width, staticHeight);
}
};
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
dialog.setSize(dialog.getWidth(), staticHeight);
}
});
dialog.pack();
dialog.setVisible(true);
}
}
fonte
2012-05-08 15:58:56
+1, mi hai fatto imparare qualcosa oggi :-) –