我正在编写一个从用户那里获取一些方程式的程序。我希望每个常量都输入JTextField
,每个常数用JTextArea
分隔(说+ x0,+ x1等)。但是,我无法使格式化工作,我不知道为什么。这是相关代码:
JTextField[][] dataTextFields = new JTextField[a+1][b+1];
JTextArea[][] dataLabels = new JTextArea[a][b+1];
for (int i = 0; i < a+1; i++)
{
for (int j = 0; j < b+1; j++)
{
dataTextFields[i][j] = new JTextField(10);
dataTextFields[i][j].setLocation(5+70*i, 10+30*j);
dataTextFields[i][j].setSize(40,35);
dataEntryPanel.add(dataTextFields[i][j]);
if (i < a)
{
String build = "x" + Integer.toString(i) + "+";
dataLabels[i][j] = new JTextArea(build);
dataLabels[i][j].setBackground(dataEntryPanel.getBackground());
dataLabels[i][j].setBounds(45+70*i,20+30*j,29,30);
dataEntryPanel.add(dataLabels[i][j]);
}
}
}
这会创建JTextFields
JTextAreas
0f&#34; + xi&#34;在他们之间。但是,当我运行applet时,它看起来像这样:
我可以点击标签并将它们带到前台,看起来就是这样:
我希望标签在没有用户任何努力的情况下可见,显然。 JTextArea是否有一些属性可以更改以将其带到前台?我真的不想再添加任何UI元素(面板,容器等)。谢谢!
答案 0 :(得分:0)
我会使用GridBagLayout
布局容器。 GridBagLayout
与HTML表格非常相似,您可以在其中使用不同的单元格,这些单元格的高度和宽度都会增加,以便最有效地调整内容。对于您的特定布局,这样的东西可以工作:
public class SwingTest extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run () {
new SwingTest().setVisible(true);
}
});
}
public SwingTest () {
super("Swing Test");
JPanel contentPane = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = 0;
contentPane.add(createJTextField(), gbc.clone());
contentPane.add(new JLabel("x0+"), gbc.clone());
contentPane.add(createJTextField(), gbc.clone());
// go to next line
gbc.gridy++;
contentPane.add(createJTextField(), gbc.clone());
contentPane.add(new JLabel("x0+"), gbc.clone());
contentPane.add(createJTextField(), gbc.clone());
setContentPane(contentPane);
pack();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
}
private JTextField createJTextField () {
JTextField textField = new JTextField(4);
textField.setMinimumSize(textField.getPreferredSize());
return textField;
}
}
GridBagLayout是最复杂(但更灵活)的布局,需要配置许多参数。有一些更简单的,比如FlowLayout,BorderLayout,GridLayout等,它们可以相互结合使用,以实现复杂的布局。
在Swing Tutorial中,Laying Out Components上有一个非常好的部分。如果您计划花费大量时间来构建Swing GUI,那么可能值得一读。
请注意,GridBagLayout
有一个奇怪的警告:如果您要在JTextField
中使用GridBagLayout
,则会出现一个愚蠢的问题(描述为here )如果它们无法以其首选尺寸渲染(导致它们显示为微小的狭缝),则会导致它们以最小尺寸渲染。为了解决这个问题,我在JTextField
构造函数中指定了列数,以便最小值是合理的,然后将最小大小设置为首选大小。