原理は非常に簡単です、
(絶対レイアウトを使用して)1つのクリアレイアウト
2リスナーを追加します(リスナーウィンドウをドラッグします)
リスナー内の位置の動的調整アセンブリ3
結果は以下の通りであります:
ドラッグ効果の後:
コードの実装:
輸入java.awt.EventQueue。 輸入java.awt.event.ComponentAdapter。 輸入java.awt.event.ComponentEvent。 輸入javax.swing.JFrame; 輸入javax.swing.JLabel。 輸入javax.swing.JButtonの。 輸入javax.swing.JTextField。 パブリック クラスのテスト{ プライベートJFrameのフレーム。 プライベートJTextFieldのテキストフィールド。 公共の 静的な 無効メイン(文字列[] args)を{ EventQueue.invokeLater(新しいRunnableを(){ 公共 ボイドラン(){ してみてください { テストウインドウ = 新しいテスト(); window.frame.setVisible(真の); } キャッチ(例外e){ e.printStackTrace(); } } })。 } パブリックテスト(){ )(初期化; } プライベート ボイド初期化(){ フレーム = 新しいJFrameの()。 frame.setBounds( 100、100、450、300 )。 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。 frame.getContentPane()setLayoutの(NULL); //清空布局 JLabelのラベル = 新しい JLabelの( "标签" ); label.setBounds( 81、63、61、16 )。 。frame.getContentPane()(ラベル)を追加します。 JButtonのボタン = 新しい JButtonの( "按钮" ); button.setBounds( 252、58、117、29 )。 。frame.getContentPane()(ボタン)を追加します。 テキストフィールド = 新しいJTextFieldの(); textField.setText( "文本框" ); textField.setBounds( 81、110、288、26 )。 frame.getContentPane()(テキストフィールド)を追加します。; TextField.setColumns( 10 ); frame.addComponentListener(新新 ComponentAdapter(){ // ドラッグされたウィンドウリスナー 公共 のボイドcomponentResized(ComponentEvent E){ int型 whidth frame.getWidth =(); // 取得窓幅 int型の高さ=フレーム.getHeight(); // もし中心の高さを設定することができ、ウィンドウの高さ取得 // ウィンドウ1/3の左側にlable label.setBounds(whidth / 3、63は、61である、16); // (出発点x点y、高いH、幅W)タグ明らか幅と高さを設定開始 //を1/2にウィンドウの左側にlable 16)、さbutton.setBounds(whidth / 2、63であり、61; //(X点、始点Y、高いH、幅wを開始する) // ウィンドウの幅は常に1/2 textField.setBounds(81、110、whidth / 2、26れている); // (点xを開始、出発点Y、幅W、高H) } }); } }