私はスイングアプリケーションを使用しています。解像度 (1280*1024) で多くのフォームを作成しました。解像度でアプリケーションをデプロイすると、フォームは解像度 (1024*768) やその他の小さな解像度でクリッピングします。MIGLayOutManagerを試してみました! およびGridBagLayout ! これらは、アプリケーションをゼロから開発する場合に適していますが、私には機能しません。Exampleを使用して、フレームの子コントロールのサイズを変更したい !
以下は、@ Guillaume PoletによるAnswerの編集でGridBagLayOutに使用したコードです
try {
Utility util = new Utility(null);
Component[] com = null;
java.util.List<Component> jComp = new ArrayList<Component>();
if (obj instanceof JPanel) {
JPanel panel = (JPanel) obj;
com = panel.getComponents();
} else if (obj instanceof JFrame) {
JFrame JFrm = (JFrame) obj;
jComp = util.harvestAllComp(JFrm);
} else if (obj instanceof JFrame) {
JFrame frm = (JFrame) obj;
// frm.cp = cp;
String dbName = "GoldNew";
util = new Utility(dbName);
DBEngine db = new DBEngine(dbName);
for (int a = 0; a < jComp.size(); a++) {
if (jComp.get(a) instanceof JLabel) {
JLabel label = (JLabel) com[a];
} else if (jComp.get(a) instanceof JTextField) {
JTextField jtxt = (JTextField) jComp.get(a);
jtxt.setEditable(boolEnable);
// Do Nothing
} else if (jComp.get(a) instanceof JTextArea) {
JTextArea jtxt = (JTextArea) jComp.get(a);
jtxt.setEditable(boolEnable);
} else if (jComp.get(a) instanceof JXDatePicker) {
JXDatePicker jdate = (JXDatePicker) jComp.get(a);
jdate.setEditable(boolEnable);
jdate.getEditor().setEditable(false);
// Do Nothing
} else if (jComp.get(a) instanceof JTabbedPane) {
JTabbedPane tabPane = (JTabbedPane) jComp.get(a);
Component[] comTab = tabPane.getComponents();
tabPane.removeAll();
GridBagLayout tabLayOut = new GridBagLayout();
tabPane.setLayout(tabLayOut);
addRowOfComponents(tabPane, comTab);
}
if (jComp.get(a) instanceof JPanel) {
JPanel panel2 = (JPanel) jComp.get(a);
Component[] comTab = panel2.getComponents();
panel2.removeAll();
GridBagLayout tabLayOut = new GridBagLayout();
panel2.setLayout(tabLayOut);
addRowOfComponents(panel2, comTab);
} else if (jComp.get(a) instanceof JTable) {
final JTable tbl = (JTable) jComp.get(a);
tbl.getTableHeader().setReorderingAllowed(false);
} else if ((!(jComp.get(a) instanceof JTextField)) && (!(jComp.get(a) instanceof JXDatePicker))
&& (!(jComp.get(a) instanceof JTextArea))
&& (!(jComp.get(a) instanceof JLabel))) {
// jComp.get(a).setEnabled(boolEnable);
jComp.get(a).setEnabled(boolEnable);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
例のように、コンポーネントのサイズと画面のサイズを使用してアスペクト比を決定し、アスペクト比を使用してコンポーネントをスケーリングしたい! 以下の情報を使用します。タスクを達成する方法をガイドしてくれる人がいれば、本当に感謝しています。
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frm.setBounds(0, 0, dim.width - 100, dim.height - 100);
int w = frm.getSize().width;//Size Of Form
int h = frm.getSize().height;
int x = (dim.width - w) / 2;
int y = (dim.height - h) / 2;