Java 如何将按钮垂直放置在框架中心?
我将把这些按钮放在框架的中心,并在彼此上方,就像这样Java 如何将按钮垂直放置在框架中心?,java,swing,button,center,Java,Swing,Button,Center,我将把这些按钮放在框架的中心,并在彼此上方,就像这样 BUTTON BUTTON BUTTON 我在这个论坛上搜索了多个主题,但到目前为止,我尝试的所有内容都不起作用。我希望有人能找到解决办法 这是我到目前为止的代码: package ípsen1; import java
BUTTON
BUTTON
BUTTON
我在这个论坛上搜索了多个主题,但到目前为止,我尝试的所有内容都不起作用。我希望有人能找到解决办法
这是我到目前为止的代码:
package ípsen1;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Paneel extends JPanel implements ActionListener {
Image achtergrond;
private JButton spelHervatten;
private JButton spelOpslaan;
private JButton spelAfsluiten;
public Paneel(){
//buttons
spelHervatten = new JButton("Spel hervatten");
spelHervatten.setPreferredSize(new Dimension(380, 65));
spelOpslaan = new JButton("Spel opslaan");
spelOpslaan.setPreferredSize(new Dimension(380, 65));
spelAfsluiten = new JButton("Spel afsluiten");
spelAfsluiten.setPreferredSize(new Dimension(380, 65));
//object Paneel luistert naar button events
spelAfsluiten.addActionListener(this);
add (spelHervatten);
add (spelOpslaan);
add (spelAfsluiten);
}
public void paintComponent(Graphics g) {
//achtergrond afbeelding zetten
achtergrond = Toolkit.getDefaultToolkit().getImage("hout.jpg");
//screensize
g.drawImage(achtergrond, 0,0, 1024,768,this);
}
//actie na klik op button
public void actionPerformed(ActionEvent e) {
if(e.getSource() == spelAfsluiten){
System.out.println("Spel afsluiten");
System.exit(0);
}
}
}
我认为没有办法做到这一点 您应该先获得面板/框架的尺寸,然后手动计算以找到按钮的中心位置。A可能就是您想要的。可以指定要在该特定布局管理器的构造函数中沿y轴添加组件 您可以将此行添加到
Paneel
类的构造函数中
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
至于中心对齐,我不知道这是否是一个好的做法,但你可以为每个按钮单独设置水平对齐。例如:
spelHervatten.setAlignmentX(CENTER_ALIGNMENT);
您可以使用
GridBagLayout
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(new JButton("Button"), gbc);
add(new JButton("Button"), gbc);
add(new JButton("Button"), gbc);
add(new JButton("Button"), gbc);
有关更多详细信息,请参见改写部分内容:
您可能希望尝试将按钮放在JFrame的“风向”样式BorderLayout
:
只需在
中心创建一个块
,其中一个是东
块,另一个是西
块,周围有一定的大小。然后将按钮插入中心块内部。如果您不希望它们是完整的大小,只需添加另一个东
和西
使用网格布局
来显示一列宽度相等的按钮
按钮随着窗口大小的增加而拉伸。要保持按钮大小,请将GridLayout
作为单个组件放入gridbagloayout
中,无任何约束。它将居中
通过设置边距来增加按钮的大小
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
/*
* Uses a GridLayout for a single column of buttons of equal width.
* The buttons stretch as the window's size increases. To maintain
* the button size, put the GridLayout as a single component into a
* GridBagLayout with no constraint. It will be centered.
*/
public class CenteredSingleColumnOfButtons {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
// the GUI as seen by the user (without frame)
JPanel gui = new JPanel(new GridLayout(0,1,10,10));
gui.setBorder(new EmptyBorder(20,30,20,30));
String[] buttonLabels = {
"Spel hervatten",
"Spel opslaan",
"Spel afsluiten"
};
Insets margin = new Insets(20,150,20,150);
JButton b = null;
for (String s : buttonLabels) {
b = new JButton(s);
b.setMargin(margin);
gui.add(b);
}
JFrame f = new JFrame("Centered Single Column of Buttons");
f.add(gui);
// Ensures JVM closes after frame(s) closed and
// all non-daemon threads are finished
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// See http://stackoverflow.com/a/7143398/418556 for demo.
f.setLocationByPlatform(true);
// ensures the frame is the minimum size it needs to be
// in order display the components within it
f.pack();
f.setMinimumSize(f.getSize());
// should be done last, to avoid flickering, moving,
// resizing artifacts.
f.setVisible(true);
System.out.println(b.getSize());
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}
除非你想添加三个以上的按钮,或者不想让它们扩展全宽,或者希望它们的高度相等……有趣的想法……绝对布局的建议不会产生专业或长期可持续的结果,特别是在有大量其他按钮的情况下,跨平台工作的更简单解决方案
spelopslan.setPreferredSize(新维度(380,65))代码>请参见(是)。public void paintComponent(图形g){//achtergrond afbeelding zetten achtergrond=Toolkit.getDefaultToolkit().getImage(“hout.jpg”);…
1)第1行应该是super.paintComponent(g)
2)achtergrond afbeelding zetten
非英语注释是噪音,因此。3)不要在paintXxx(…)
方法中加载图像!而是在启动时加载图像,并将其存储为类属性。要更快获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。