所以如果我有这样的GUI:
import javax.swing.GroupLayout;
public class MyTest extends javax.swing.JFrame {
public MyTest() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("This is a sample GUI");
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(0, 244, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(0, 85, Short.MAX_VALUE)
);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyTest().setVisible(true);
}
});
}
}
现在,当我运行程序时,它与屏幕左上角的(0,0)位置对齐。无论如何,我可以将它与屏幕中心或另一个自定义位置对齐吗? 如果我只使用不使用GroupLayout的框架,就像setLocation(左,上)一样,这样可以正常工作,但是通过这个实现,我该如何更改此GUI的默认定位?
答案 0 :(得分:4)
将带有GroupLayout
的contianer作为GridBagLayout
的单个组件,没有约束。整个容器将居中。
我只需要将整个GUI(包含其中的内容)集中到scree的中心,
与GroupLayout
和一切与setLocationRelativeTo(null)
有关。但是阅读How to best position Swing GUIs以获得更好的方法来在屏幕上定位GUI(即在比屏幕中心更合理的位置 - 例如下面的例子)。
答案 1 :(得分:3)
就像我之前提到的问题中提到的,在我认为你指的是框架本身居中之前 - 使用没有约束的GridBagLayout
。这将产生将组件放在父容器的中心的效果。请注意,由于框架具有窗口装饰,这意味着父容器'本身略低于屏幕中心。如果这是一个问题,唯一的解决方法是“解决问题”。我能想到的是使用一个未修饰的框架。
我把' fix'在引号中,因为我认为这是要求被打破。
import java.awt.*;
import javax.swing.*;
public class MyTest extends JFrame {
public MyTest() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("This is a sample GUI");
getContentPane().setLayout(new GridBagLayout());
JPanel gui = new JPanel();
gui.setBackground(Color.GREEN);
GroupLayout layout = new GroupLayout(gui);
gui.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(0, 244, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGap(0, 85, Short.MAX_VALUE)
);
add(gui);
pack();
setExtendedState(Frame.MAXIMIZED_BOTH );
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyTest().setVisible(true);
}
});
}
}
答案 2 :(得分:0)
我猜你确实回答了这个问题,但关于如何使用它我并不是很清楚。 只需在pack()之前调用下面;正是我想要的:
this.setLocation(500,300); //value left, top in pixes
pack();
基本上我需要知道的是setLocation(x,y);
的确切用法,以及使用关键字"this"
,谢谢。