JPanel
以下のようなレイアウトでJavaで作成したいと思います。何か案は?
5 に答える
8
垂直BoxLayoutを使用して、各行のアイテムの配置を設定します。(各行を独自のものにするJPanel
)
もう 1 つのオプションは、aSpringLayout
または aを使用してGridBoxLayout
、各インデントに間隔を設定することです。
于 2011-04-22T12:03:46.527 に答える
1
これは、jgoodies フォームFormLayout (Google のライブラリ) を使用した実装です。
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import javax.swing.*;
import java.awt.*;
public class FormSample {
private static JPanel generatePanel() {
FormLayout layout = new FormLayout(
"3dlu, 15dlu, max(50dlu;p), 2dlu, p, 3dlu", // column definition
"5dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 5dlu" // row definition
);
JPanel panel = new JPanel(layout);
CellConstraints cc = new CellConstraints();
int row = 0;
panel.add(new JLabel("Amplitude"), cc.xyw(2, row * 4 + 2, 4));
panel.add(new JTextField(), cc.xy(3, row * 4 + 4));
panel.add(new JLabel("V"), cc.xy(5, row * 4 + 4));
row++;
panel.add(new JLabel("Off-set"), cc.xyw(2, row * 4 + 2, 4));
panel.add(new JTextField(), cc.xy(3, row * 4 + 4));
panel.add(new JLabel("V"), cc.xy(5, row * 4 + 4));
row++;
panel.add(new JLabel("Frequentie"), cc.xyw(2, row * 4 + 2, 4));
panel.add(new JTextField(), cc.xy(3, row * 4 + 4));
panel.add(new JLabel("Hz"), cc.xy(5, row * 4 + 4));
row++;
panel.add(new JLabel("Fase"), cc.xyw(2, row * 4 + 2, 4));
panel.add(new JTextField(), cc.xy(3, row * 4 + 4));
panel.add(new JLabel("rad"), cc.xy(5, row * 4 + 4));
return panel;
}
public static void main(String[] args) {
// create frame
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// add content panel
frame.setContentPane(generatePanel());
// shring/expand to optimal size
frame.pack();
// center frame
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension resolution = toolkit.getScreenSize();
Dimension frameSize = frame.getSize();
int xLocation = resolution.width / 2 - frameSize.width / 2;
int yLocation = resolution.height / 2 - frameSize.height / 2;
frame.setLocation(xLocation, yLocation);
// show frame
frame.setVisible(true);
}
}
于 2011-04-22T12:29:28.497 に答える
0
GroupLayout
マネージャーと一緒に例を作成しました。インデントされたコンポーネントは、LayoutStyle.ComponentPlacement.INDENT
コンポーネント配置タイプで作成されます。
package com.zetcode;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.BASELINE;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;
public class GroupLayoutIndent extends JFrame {
public GroupLayoutIndent() {
initUI();
setTitle("Indents");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
JLabel ampLbl = new JLabel("Amplitude");
JLabel offLbl = new JLabel("Off-set");
JLabel freqLbl = new JLabel("Frequency");
JLabel phsLbl = new JLabel("Phase");
JLabel unit1 = new JLabel("V");
JLabel unit2 = new JLabel("V");
JLabel unit3 = new JLabel("Hz");
JLabel unit4 = new JLabel("rad");
JTextField field1 = new JTextField(12);
JTextField field2 = new JTextField(12);
JTextField field3 = new JTextField(12);
JTextField field4 = new JTextField(12);
gl.setAutoCreateGaps(true);
gl.setAutoCreateContainerGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup()
.addComponent(ampLbl)
.addGroup(gl.createSequentialGroup()
.addPreferredGap(ampLbl, field1,
LayoutStyle.ComponentPlacement.INDENT)
.addComponent(field1)
.addComponent(unit1))
.addComponent(offLbl)
.addGroup(gl.createSequentialGroup()
.addPreferredGap(offLbl, field2,
LayoutStyle.ComponentPlacement.INDENT)
.addComponent(field2)
.addComponent(unit2))
.addComponent(freqLbl)
.addGroup(gl.createSequentialGroup()
.addPreferredGap(freqLbl, field3,
LayoutStyle.ComponentPlacement.INDENT)
.addComponent(field3)
.addComponent(unit3))
.addComponent(phsLbl)
.addGroup(gl.createSequentialGroup()
.addPreferredGap(phsLbl, field4,
LayoutStyle.ComponentPlacement.INDENT)
.addComponent(field4)
.addComponent(unit4))
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(ampLbl)
.addGroup(gl.createParallelGroup(BASELINE)
.addComponent(field1)
.addComponent(unit1))
.addComponent(offLbl)
.addGroup(gl.createParallelGroup(BASELINE)
.addComponent(field2)
.addComponent(unit2))
.addComponent(freqLbl)
.addGroup(gl.createParallelGroup(BASELINE)
.addComponent(field3)
.addComponent(unit3))
.addComponent(phsLbl)
.addGroup(gl.createParallelGroup(BASELINE)
.addComponent(field4)
.addComponent(unit4))
);
gl.linkSize(field1, field2, field3, field4);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GroupLayoutIndent ex = new GroupLayoutIndent();
ex.setVisible(true);
}
});
}
}
于 2014-07-30T14:47:41.723 に答える
-1
GroupLayoutは、NetBeans(および私が間違っていない場合は他のいくつかのIDE)のGUI設計ツールのデフォルトのレイアウトマネージャーです。
于 2012-02-07T18:05:40.777 に答える