JavaのGridBagConstraintsクラスの重要性は何ですか?
GridBagLayout は非常に柔軟なレイアウトマネージャーであり、制約を使用してコンポーネントを相互に相対的に配置できます。 。各GridBagLayout セルの動的な長方形グリッドを使用し、各コンポーネントはその表示領域と呼ばれる1つ以上のセルを占有します。 GridBagLayoutによって管理される各コンポーネント GridBagConstraintsに関連付けられています コンポーネントがその表示領域内にどのように配置されるかを指定するインスタンス。
GridBagConstraints
GridBagConstraintsをカスタマイズできます 1つ以上のパブリックインスタンス変数を設定してオブジェクトを作成します。これらの変数は、コンポーネントの位置、サイズ、成長因子、アンカー、インセット、塗りつぶし、およびパディングを指定します。 。
- グリッド :コンポーネントが占める左端のセルを指定するint値。 gridxは、コンポーネントが配置される列を指定します。
- 汚れた :コンポーネントが占める最上位のセルを指定するint値。 gridyは、配置される行を指定します。
- グリッドの高さ :コンポーネントが占める垂直セルの数を指定するint値。
- グリッド幅 :コンポーネントが占める水平セルの数を指定するint値。
- ipadx :各コントロールに追加される内部水平パディングの量を指定するint値。
- ipady :各コントロールに追加される内部垂直パディングの量を指定するint値。
- インセット :セルの両側に残す空きスペースの量を指定するInsetsオブジェクト。
- weightx :結果のレイアウトが割り当てられた領域よりも水平方向に小さい場合に、余分な水平方向のスペースがどのように分散されるかを指定するdouble値。
- 重い :結果のレイアウトが割り当てられた領域よりも垂直方向に小さい場合に、余分な垂直方向のスペースがどのように分散されるかを指定するdouble値。
- アンカー :セル内のコンポーネントの配置を指定するint値。
- 塗りつぶし :セル内の余分なスペースをどう処理するかを指定するint値。
- 相対的 :gridxおよびgridyフィールドの場合、このフィールドは、コンポーネントが最後に追加されたコンポーネントの隣に配置されることを指定します。 gridwidthフィールドとgridheightフィールドの場合、このフィールドは、コンポーネントが行または列の最後から2番目のコンポーネントになることを指定します。
- 残り :gridwidthフィールドとgridheightフィールドの場合、このフィールドは、コンポーネントが行または列の最後のコンポーネントであることを指定します。
例
import java.awt.*;
import javax.swing.*;
public class GridBagLayoutTest {
public static void main(String[] a) {
JFrame frame = new JFrame("GridBagLayout Test");
Container myPane = frame.getContentPane();
myPane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.CENTER);
myPane.add(getFieldPanel(),c);
setMyConstraints(c,0,1,GridBagConstraints.CENTER);
myPane.add(getButtonPanel(),c);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 250);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static JPanel getFieldPanel() {
JPanel p = new JPanel(new GridBagLayout());
p.setBorder(BorderFactory.createTitledBorder("Details"));
GridBagConstraints c = new GridBagConstraints();
setMyConstraints(c,0,0,GridBagConstraints.EAST);
p.add(new JLabel("Name:"),c);
setMyConstraints(c,1,0,GridBagConstraints.WEST);
p.add(new JTextField(16),c);
setMyConstraints(c,0,1,GridBagConstraints.EAST);
p.add(new JLabel("System:"),c);
setMyConstraints(c,1,1,GridBagConstraints.WEST);
p.add(getSystemPanel(),c);
setMyConstraints(c,0,2,GridBagConstraints.EAST);
p.add(new JLabel("Language:"),c);
setMyConstraints(c,1,2,GridBagConstraints.WEST);
p.add(getLanguagePanel(),c);
setMyConstraints(c,0,3,GridBagConstraints.EAST);
p.add(new JLabel("Year:"),c);
setMyConstraints(c,1,3,GridBagConstraints.WEST);
p.add(new JComboBox(new String[] {"2019","2020","2021"}),c);
return p;
}
private static JPanel getButtonPanel() {
JPanel p = new JPanel(new GridBagLayout());
p.add(new JButton("OK"));
p.add(new JButton("Cancel"));
return p;
}
private static JPanel getSystemPanel() {
JRadioButton winButton = new JRadioButton("Windows",true);
JRadioButton macButton = new JRadioButton("Mac",false);
ButtonGroup systemGroup = new ButtonGroup();
systemGroup.add(winButton);
systemGroup.add(macButton);
JPanel p = new JPanel(new GridBagLayout());
p.add(winButton);
p.add(macButton);
return p;
}
private static JPanel getLanguagePanel() {
JPanel p = new JPanel(new GridBagLayout());
p.add(new JCheckBox("Java",true));
p.add(new JCheckBox("Python",true));
p.add(new JCheckBox("Spark",false));
return p;
}
private static void setMyConstraints(GridBagConstraints c, int gridx, int gridy, int anchor) {
c.gridx = gridx;
c.gridy = gridy;
c.anchor = anchor;
}
} 出力
-
JavaでのSwingWorkerクラスの重要性は何ですか?
SwingWorker クラスを使用すると、非同期を実行できます タスク ワーカースレッド(長時間実行タスクなど)で、イベントディスパッチスレッド(EDT )からSwingコンポーネントを更新します。 ) タスクの結果に基づきます。 Java1.6バージョンで導入されました。 SwingWorkerクラス java.swing.SwingWorker クラスはタスクワーカーであり、時間のかかるタスクをバックグラウンドで実行します。 SwingWorker インスタンスは3つのスレッドと相互作用します。現在 スレッド 、ワーカースレッド 、およびイベントディスパッチスレッド(E
-
JavaでのSwingUtilitiesクラスの重要性は何ですか?
Javaでは、Swingコンポーネントが画面に表示された後、それらはイベント処理スレッドと呼ばれる1つのスレッドでのみ操作できます。 。別のブロックにコードを記述し、このブロックにイベントへの参照を与えることができます 処理 スレッド 。 SwingUtilities クラスには、 invokeAndWait()という2つの重要な静的メソッドがあります。 およびinvokeLater() コードのブロックへの参照をイベントに配置するために使用します キュー 。 構文 public static void invokeAndWait(Runnable doRun) throws Interr