Java 有人知道如何轻松确定框架上摆动组件的组成吗?不使用netbeans或windows builder
我的意思是,我想手动操作,但为了确定位置,我想知道还有什么替代方法 例如,程序:Java 有人知道如何轻松确定框架上摆动组件的组成吗?不使用netbeans或windows builder,java,swing,layout-manager,Java,Swing,Layout Manager,我的意思是,我想手动操作,但为了确定位置,我想知道还有什么替代方法 例如,程序: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class testLotus { public static void main(String[] args) { JFrame gui= new JFrame(); JLabel h1 = new JLabel("Some
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class testLotus {
public static void main(String[] args) {
JFrame gui= new JFrame();
JLabel h1 = new JLabel("Some text");
JTextField text = new JTextField(15);
JPanel panel = new JPanel();
h1.setBounds(180,50,120,20); //this is it
text.setBounds(180,90,120,20); // and this
panel.setLayout(null);
panel.add(h1);
panel.add(text);
gui.getContentPane().add(panel);
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(800,600 );
gui.setVisible(true);
}
}
您可以通过遍历组件并打印所有感兴趣的属性来检查组件的位置。例如:
import java.awt.*;
import javax.swing.*;
public class TestLotus {
public static void main(final String[] arguments) {
SwingUtilities.invokeLater(() -> new TestLotus().createAndShowGui());
}
private void createAndShowGui() {
final JFrame frame = new JFrame("Stack Overflow");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JLabel h1 = new JLabel("Some text");
JTextField text = new JTextField(15);
JPanel panel = new JPanel();
h1.setBounds(180,50,120,20); //this is it
text.setBounds(180,90,120,20); // and this
panel.setLayout(null);
panel.add(h1);
panel.add(text);
frame.getContentPane().add(panel);
frame.setVisible(true);
printComponents(frame, "");
}
private void printComponents(Container container, String indent) {
for (Component component : container.getComponents()) {
System.out.println(indent + "component.getClass().getName(): "
+ component.getClass().getName());
System.out.println(indent + "component.getBounds(): "
+ component.getBounds());
if (component instanceof Container) {
printComponents((Container) component, indent + " ");
}
}
}
}
您的输出将如下所示:
component.getClass().getName(): javax.swing.JRootPane
component.getBounds(): java.awt.Rectangle[x=9,y=38,width=782,height=553]
component.getClass().getName(): javax.swing.JPanel
component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
component.getClass().getName(): javax.swing.JLayeredPane
component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
component.getClass().getName(): javax.swing.JPanel
component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
component.getClass().getName(): javax.swing.JPanel
component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
component.getClass().getName(): javax.swing.JLabel
component.getBounds(): java.awt.Rectangle[x=180,y=50,width=120,height=20]
component.getClass().getName(): javax.swing.JTextField
component.getBounds(): java.awt.Rectangle[x=180,y=90,width=120,height=20]
请解释什么是“swing组件的组成”?在JFrame.pack和/或JFrame.setVisible(true)之后是,您希望完成布局;否则,输出就不那么有趣了。(由于标签和文本字段是明确定位的,并且面板的布局是
null
,因此这些组件的坐标仍然可见。)在上面的示例中,调用printComponents(frame,”)代码>是在框架可见后生成的。返回NullLayout,这(非常确定)只是你的答案在这里没有被提升的一个原因,而且在我的情况下,我使用了OP中的代码,所以这不是我的决定。我更喜欢尽可能地使用布局管理器,在这种情况下,我认为使用null
布局对于这个问题并不重要(至少就我的理解而言)。获得选票很好,但我的主要目标是帮助人们解决编程问题。请随时保存您的投票以获得其他答案…:-)1.我使用了OP中的代码-今天和昨天有多少次类似…:-)2.