如何修复 JButton 位置
How to fix JButton Location
之前我问过一个关于这个程序的问题,我和你们一起解决了。现在我在第一个包含形状游戏的面板上创建了新面板。所以我尝试在新面板上设置 JButton。但我无法更改 Jbuttons 的位置。
我正在尝试设置新 panel.I 的中心已经尝试过 FLowLayout()、BorderLayout() 和 setBounds();出了点问题。
以前的问题;
public class myshapestry extends JFrame implements ActionListener {
JFrame frame=new JFrame("Deneme");
Startthegame panelstart= new Startthegame();
Container l ;
JLabel statusbar = new JLabel("default");
static JButton start;
static JButton exit;
myshapestry() {
l=this.getContentPane();
this.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.add(panelstart);
frame.add(statusbar, BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(getPreferredSize());
start = new JButton("Start");
exit = new JButton("Exit");
panelstart.add(start);
panelstart.add(exit);
}
public Dimension getPreferredSize() {
return new Dimension(500,600);
}
public static void main (String args[]){
myshapestry tr=new myshapestry();
tr.setTitle("Game of Shapes");
}
public class Startthegame extends JPanel {
}
}
您是从 JFrame
扩展的,但在 class 中创建了 JFrame
的新实例并与两者交互,这只会混淆问题。从摆脱 extends JFrame
开始,您不会向 class 添加任何新功能,它只是将您锁定在一个用例中
static
不是你的朋友,你应该尽可能避免使用它。在这种情况下,您可以将按钮移动到 Startthegame
。这是对工作单元隔离职责的基本 OO 原则。
要使按钮在容器内水平和垂直居中,您可以使用 GridBagLayout
public class Startthegame extends JPanel {
private JButton start;
private JButton exit;
public Startthegame() {
setLayout(new GridBagLayout());
start = new JButton("Start");
exit = new JButton("Exit");
add(start);
add(exit);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 600);
}
}
你还应该在建立基本 UI 之后调用 setVisible
,否则你可能会在未显示的组件中结束
例如...
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class MyShapesTry {
JFrame frame = new JFrame("Deneme");
Startthegame panelstart = new Startthegame();
Container l;
JLabel statusbar = new JLabel("default");
public MyShapesTry() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panelstart);
frame.add(statusbar, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
MyShapesTry tr = new MyShapesTry();
}
});
}
}
之前我问过一个关于这个程序的问题,我和你们一起解决了。现在我在第一个包含形状游戏的面板上创建了新面板。所以我尝试在新面板上设置 JButton。但我无法更改 Jbuttons 的位置。 我正在尝试设置新 panel.I 的中心已经尝试过 FLowLayout()、BorderLayout() 和 setBounds();出了点问题。
以前的问题;
public class myshapestry extends JFrame implements ActionListener {
JFrame frame=new JFrame("Deneme");
Startthegame panelstart= new Startthegame();
Container l ;
JLabel statusbar = new JLabel("default");
static JButton start;
static JButton exit;
myshapestry() {
l=this.getContentPane();
this.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.add(panelstart);
frame.add(statusbar, BorderLayout.SOUTH);
frame.setVisible(true);
frame.setSize(getPreferredSize());
start = new JButton("Start");
exit = new JButton("Exit");
panelstart.add(start);
panelstart.add(exit);
}
public Dimension getPreferredSize() {
return new Dimension(500,600);
}
public static void main (String args[]){
myshapestry tr=new myshapestry();
tr.setTitle("Game of Shapes");
}
public class Startthegame extends JPanel {
}
}
您是从 JFrame
扩展的,但在 class 中创建了 JFrame
的新实例并与两者交互,这只会混淆问题。从摆脱 extends JFrame
开始,您不会向 class 添加任何新功能,它只是将您锁定在一个用例中
static
不是你的朋友,你应该尽可能避免使用它。在这种情况下,您可以将按钮移动到 Startthegame
。这是对工作单元隔离职责的基本 OO 原则。
要使按钮在容器内水平和垂直居中,您可以使用 GridBagLayout
public class Startthegame extends JPanel {
private JButton start;
private JButton exit;
public Startthegame() {
setLayout(new GridBagLayout());
start = new JButton("Start");
exit = new JButton("Exit");
add(start);
add(exit);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 600);
}
}
你还应该在建立基本 UI 之后调用 setVisible
,否则你可能会在未显示的组件中结束
例如...
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class MyShapesTry {
JFrame frame = new JFrame("Deneme");
Startthegame panelstart = new Startthegame();
Container l;
JLabel statusbar = new JLabel("default");
public MyShapesTry() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panelstart);
frame.add(statusbar, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
MyShapesTry tr = new MyShapesTry();
}
});
}
}