문제 설명
특정 형식의 JAVA GUI 제작에 대한 질문 (Question about making a JAVA GUI of a certain format)
다음과 같은 GUI를 만들려고 합니다.
저는 5개의 버튼을 위한 공간이 있는 BorderLayout을 사용하는 방법만 알고 있습니다. 북쪽, 서쪽, 중앙, 동쪽 및 남쪽입니다.
최상단에 6개의 구성 요소가 있어야 하므로 이 접근 방식은 작동하지 않습니다. 맨 윗줄에 둘 이상의 구성 요소를 가질 수 있도록 만드는 방법을 모르겠습니다. 사용할 수 있는 다른 레이아웃이 있습니까? 아니면 BorderLayout을 조작하여 맨 윗줄에 6개의 구성 요소를 배치할 수 있습니까?
참조 솔루션
방법 1:
What you need to do is nest components inside of other components. For example, the top (North) should be one JPanel
. That JPanel
will contain the 6 components on the top.
The code may look similar to the following:
JPanel northPane = new JPanel();
northPane.add(new JLabel("Principle: "));
northPane.add(principleTextBox);
... and so on
mainPanel.setLayout(new BorderLayout());
mainPanel.add(northPanel, BorderLayout.NORTH);
The Center component will probably be another JPanel
containing the two center buttons. And the South component will be another JPanel
containing the single JLabel
or simply the JLabel
.
If you don't have to use a BorderLayout
for the main panel, it may be easier to use a BoxLayout
.
방법 2:
Once again I turn to miglayout, the absolute best layout manager for Java. No nested JPanels, just a simple layout using string based constraints.
With debug mode on:
After resizing the window (note the ratio of the size of the textfields remains the same)
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
/**
*
* @author nicholasdunn
*/
public class InterestCalculator extends JPanel {
public InterestCalculator() {
super(new MigLayout("debug, fill", "align center"));
// Make 6 components cram into one cell
add(new JLabel("Principal:"), "split 6");
// This textfield grows at twice the normal rate
add(new JTextField(), "growx 200");
add(new JLabel("Interest rate (percentage):"));
// This one at a normal rate
add(new JTextField(), "growx 100");
add(new JLabel("Years:"));
// This one at half the normal rate
add(new JTextField(), "growx 50, wrap");
// The row with the two buttons
add(new JButton("Compute simple interest"), "split 2");
add(new JButton("Compute compound interest"), "wrap");
// The result label
add(new JLabel("The result with simple interest would be"));
}
public static void main(String[] args) {
JFrame frame = new JFrame("");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new InterestCalculator();
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
방법 3:
If I were recreating that UI, I would start with a JPanel using a GridLayout with 3 rows and 1 column. In each column I would add a child JPanel.
Then for each row I would use a GridBagLayout to position the components.
방법 4:
Here is a tutorial about layout managers.
Remember that you can always add several elements to a JPanel and apply a specific layout to that JPanel. Then you can nest panels(add panels inside other panels).
(by Greg、jjnguy、I82Much、Ronnie Howell、Enrique)