私はJavaで非常にシンプルなGUIに取り組んでいます。
このGUIで表示したいものは次のとおりです。
ここに私のコードがあります:
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Prova {
public static void main(String[] args) {
JFrame frame = new JFrame("A Simple GUI");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setLocation(430, 100);
JPanel panel = new JPanel();
frame.add(panel);
JLabel lbl = new JLabel("Select one of the possible choices and click OK");
lbl.setVisible(true);
panel.add(lbl);
String[] choices = { "CHOICE 1","CHOICE 2", "CHOICE 3","CHOICE 4","CHOICE 5","CHOICE 6"};
final JComboBox<String> cb = new JComboBox<String>(choices);
cb.setVisible(true);
panel.add(cb);
JButton btn = new JButton("OK");
panel.add(btn);
}
}
残念ながら、私が得る結果は
画像でわかるように、ラベル、JComboBox、およびJButtonは同じ行にあります!
代わりに、上記のように「スタック」する必要があります。
JLabel
JComboBox
JButton
SetLocation(int x、int y)メソッドを使用してみましたが、常に同じ位置に表示されます。
どうもありがとう!
frame.setLayout(null);
を使用すると、ラベル、ボタンなどを好きな場所に配置できます
Java標準レイアウト(GridLayout、LinearLayout、BoxLayout)のいずれかを使用する必要があります。
1列3行のグリッドレイアウトを使用することをお勧めします
以下のような
setLayout(new GridLayout(1,3));
add(new Button("1"));
add(new Button("2"));
add(new Button("3"));
これは、子を配置するために使用されるレイアウトによるものです。デフォルトでは、フロー内のすべての子コンポーネントを左から右に配置するFlowLayoutにより、上記の表示が得られます。
必要に応じて、3行1列のGridLayoutを使用できます。
あなたの質問を理解したなら、次のコードはあなたがやろうとしていることを過度に複雑にすることなく達成します:
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.BoxLayout; // added code
import Java.awt.Component; // added code
public class Prova {
public static void main(String[] args) {
JFrame frame = new JFrame("A Simple GUI");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setLocation(430, 100);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // added code
frame.add(panel);
JLabel lbl = new JLabel("Select one of the possible choices and click OK");
lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
//lbl.setVisible(true); // Not needed
panel.add(lbl);
String[] choices = { "CHOICE 1", "CHOICE 2", "CHOICE 3", "CHOICE 4",
"CHOICE 5", "CHOICE 6" };
final JComboBox<String> cb = new JComboBox<String>(choices);
cb.setMaximumSize(cb.getPreferredSize()); // added code
cb.setAlignmentX(Component.CENTER_ALIGNMENT);// added code
//cb.setVisible(true); // Not needed
panel.add(cb);
JButton btn = new JButton("OK");
btn.setAlignmentX(Component.CENTER_ALIGNMENT); // added code
panel.add(btn);
frame.setVisible(true); // added code
}
}
setLocation
メソッドは、レイアウトに非常に具体的な(芸術的?)目標がない限り、非常に複雑になることがよくあります。この問題に対する簡単な解決策は、BoxLayout
を使用し、y方向に追加することを指定することです(垂直に下向き)。JComboBox
(およびその他のGUI要素の寸法を指定する必要があることに注意してください。後で追加したい)巨大なドロップダウンメニューを避けるために。 cf.別のstackoverflow投稿、 JComboBox幅
レイアウトマネージャーの使用に関するチュートリアルを学習してください。ここで解決策を見つけることができます。しかし、彼らはかなり厳しいです。