Fur*_*mer 5 java size swing jcomponent jpanel
这是我的第一篇帖子,请原谅我,如果我做错了.
我的问题是:
我正在尝试将组件添加到具有Size等定义值的JPanel中.但是当我将它们添加到Panel时,它们绝对没有它们应该具有的大小和位置.例如:
public class Console extends JFrame {
private JPanel mainPanel = new JPanel();
private JTextArea textField = new JTextArea();
private JTextArea textField2 = new JTextArea();
public Console() {
this.setSize(500,300);
this.mainPanel.setSize(this.getWidth(),this.getHeight());
this.textField.setEditable(false);
this.textField.setSize(this.mainPanel.getWidth(), 100);
this.textField.setPreferredSize(new Dimension(this.mainPanel.getWidth(),this.mainPanel.getHeight()));
this.textField.setLocation(0, 0);
this.textField.setText("some text");
this.textField.setVisible(true);
this.textField2.setSize(this.mainPanel.getWidth(),200);
this.textField2.setPreferredSize(new Dimension(this.getWidth(),this.getHeight()));
this.textField2.setLocation(0,this.mainPanel.getHeight()-this.textField.getHeight());
this.textField2.setText("blabla");
this.textField2.setVisible(true);
this.mainPanel.add(textField);
this.mainPanel.add(textField2);
this.mainPanel.setVisible(true);
this.add(this.mainPanel);
// I know you should not call setVisible() in the Constructor, just for making Code more simple here.
this.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动应用程序时,两个JTextArea都非常小,位于中间(不是上面设置),而mainPanel是正确的.我试图在代码中的不同位置调用setSize()和setPreferredSize(),但它没有'工作.据我所知,最好使用LayoutManager来做到这一点,但说实话,我不知道如何正确使用它.我在Oracle Doc上检查了它,但如果有人可以为此发布一个干净的解决方案我会很感激,谢谢你提前.
你需要Layout为自己设置一个合适的Container.您setLayout的集装箱像JFrame,JPanel等等.您不会将其他组件添加到布局,而是添加到容器.然后它会相应地布局它们.它是如何工作的.
通过适当的布局,您无需拨打电话setLocation().也setVisible(true)过多,因为true是代码中这些组件的默认值.
最好不要扩展JFrame,扩展JPanel而是将其添加到JFrame.
请了解EDT,SwingUtilities.invoketLater()您需要使用它.
你也可以节省一些字节,而不是一直打字this..
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |