После того, как вы искали какое-то время, я не смог найти действительно удовлетворительных решений. Я думаю, что изменение размера диалогового окна - это то, что обрабатывается непосредственно на уровне ОС, и поэтому вы можете только сказать, что хотите, чтобы он полностью не изменялся или полностью изменялся.
Код ниже всегда будет препятствовать тому, чтобы диалог был больше, но по мере изменения размера диалогового окна границы диалогового окна все еще перемещаются.
Другой вариант, также предложенный radai, заключается в том, чтобы предотвратить изменение размера и установить пользовательскую область содержимого с помощью прослушивателя мыши, который прослушивает мышью и соответственно изменяет размер. Тем не менее, я думаю, что это не будет очень привычным для пользователя (я не думаю, что вы сможете поймать события на границе диалога).
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);
}
}
+1, ты меня не узнать что-то сегодня :-) –