0
JFormattedTextField
구성 요소를 하나의 열에 포함하고 싶습니다. 왜이 코드가 최대 크기로 확대되는지 이해가 안됩니다.BoxLayout에 대해 JFormattedTextField를 확장하지 못하도록하는 방법은 무엇입니까?
이렇게 멋진 스택으로 만들고 싶습니다.
JFormattedTextField
구성 요소를 하나의 열에 포함하고 싶습니다. 왜이 코드가 최대 크기로 확대되는지 이해가 안됩니다.BoxLayout에 대해 JFormattedTextField를 확장하지 못하도록하는 방법은 무엇입니까?
이렇게 멋진 스택으로 만들고 싶습니다.
BoxLayout
은 사용 가능한 공간에 맞게 구성 요소를 늘리는 것 같습니다. 각 구성 요소를 먼저 FlowLayout
(이 아닌은 구성 요소를 확장하지 않음)으로 각 구성 요소를 넣은 다음 BoxLayout
을 사용하여 해당 패널을 컨테이너에 추가하십시오. E.G. 위에서 언급 한 MCVE의 형태로 :
import java.awt.*;
import java.text.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class BoxLayoutQuandary {
private JComponent ui = null;
BoxLayoutQuandary() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
NumberFormat numberFormat = new DecimalFormat("##.#");
// Create the text fields and set them up.
JFormattedTextField priemerKolesa = new JFormattedTextField(numberFormat);
priemerKolesa.setColumns(8);
JFormattedTextField hrubkaNavinu = new JFormattedTextField(numberFormat);
hrubkaNavinu.setColumns(6);
// Layout the text fields in a panel.
JPanel fieldPane = new JPanel();
fieldPane.setLayout(new BoxLayout(fieldPane, BoxLayout.Y_AXIS));
ui.add(fieldPane);
JPanel priemerKolesaPanel = new JPanel();
priemerKolesaPanel.add(priemerKolesa);
fieldPane.add(priemerKolesaPanel);
JPanel hrubkaNavinuPanel = new JPanel();
hrubkaNavinuPanel.add(hrubkaNavinu);
fieldPane.add(hrubkaNavinuPanel);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
BoxLayoutQuandary o = new BoxLayoutQuandary();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
그냥 레이아웃없이 간단히 추가 할 수 있습니다. 그러나 JTextfield의 길이가 Panel의 크기와 거의 같아야합니다. – Thecarisma
@Thecarisma * "레이아웃없이 간단하게 추가 할 수 있습니다."* 레이아웃 조언은 왜 그런 * 왜 그런 조언이 될 때까지 그만 두십시오! Java GUI는 다른 로케일에서 다른 PLAF를 사용하여 다른 OS, 화면 크기, 화면 해상도 등에서 작동해야합니다. 따라서, 픽셀 완벽한 레이아웃에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [조합] (http://stackoverflow.com/a/5630271/418556)과 [공백] 레이아웃 채우기 및 테두리 (http://stackoverflow.com/a/17874718/)를 사용하십시오. 418556). –
1) 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. 2) ASCII 아트 또는 GUI의 * 의도 된 * 레이아웃의 간단한 그림을 최소한의 크기로 제공하고 크기를 조정할 수 있으면 더 많은 너비와 높이를 제공하십시오. –