JButton 缩放整个屏幕
JButton scale all the screen
我有以下代码
JFrame frame = new JFrame("Organizer");
frame.setBounds(100, 100, 700, 700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JButton testbutton = new JButton("testbutton");
testbutton.setBounds(0, 0, 55, 55);
JButton testbutton2 = new JButton("tdestbutton2");
testbutton2.setBounds(55, 0, 44, 44);
frame.add(testbutton2);
frame.add(testbutton);
结果有时是正确的,有时是这样的
我做错了什么?
What am I doing wrong?
不要使用setBounds()
;请使用 layout manager.
在添加组件到封闭容器后调用setVisible()
。
上 仅 构建和操作 Swing GUI 对象
下面的示例添加了一个具有空边框的面板和一个填充以匹配的 GridLayout
。对于这样的应用程序,还可以考虑 JToolBar
for the buttons and CardLayout
作为工作屏幕。
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* @see
*/
public class Test {
private static final int PAD = 50;
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel(new GridLayout(0, 1, PAD, PAD));
p.setBorder(BorderFactory.createEmptyBorder(PAD, PAD, PAD, PAD));
p.add(new JButton("Test Button 1"));
p.add(new JButton("Test Button 2"));
f.add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}
testbutton.setBounds(0, 0, 55, 55);
testbutton.setLocation(50, 50);
testbutton2.setBounds(55, 0, 44, 44);
testbutton2.setLocation(50, 100);
摆脱那些声明,因为那样什么都不做。
它们什么也不做,因为 JFrame 内容窗格的默认布局管理器是 BorderLayout
。 BorderLayout
将重置每个组件的 size/location。
BorderLayout
希望您在将组件添加到框架时提供 "constraint"。如果您不提供约束,则使用 "CENTER"。只能将一个组件添加到 "CENTER",因此只会显示最后添加的按钮。
理解使用 BorderLayout
基本概念的简单解决方案是使用:
//frame.add(testbutton2);
//frame.add(testbutton);
frame.add(testbutton2, BorderLayout.PAGE_START);
frame.add(testbutton, BorderLayout.PAGE_END);
这将在两行中显示按钮。
阅读 Layout Managers 上的 Swing 教程以获取更多信息和示例。下载演示代码并修改代码将遵循 Swing 约定。
例如,在使框架可见之前,您需要向框架添加组件。所以代码的顺序应该是:
frame.add(...);
frame.add(...);
frame.pack();
frame.setVisible(true);
我有以下代码
JFrame frame = new JFrame("Organizer");
frame.setBounds(100, 100, 700, 700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JButton testbutton = new JButton("testbutton");
testbutton.setBounds(0, 0, 55, 55);
JButton testbutton2 = new JButton("tdestbutton2");
testbutton2.setBounds(55, 0, 44, 44);
frame.add(testbutton2);
frame.add(testbutton);
结果有时是正确的,有时是这样的
我做错了什么?
What am I doing wrong?
不要使用
setBounds()
;请使用 layout manager.在添加组件到封闭容器后调用
setVisible()
。- 上 仅 构建和操作 Swing GUI 对象
下面的示例添加了一个具有空边框的面板和一个填充以匹配的 GridLayout
。对于这样的应用程序,还可以考虑 JToolBar
for the buttons and CardLayout
作为工作屏幕。
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* @see
*/
public class Test {
private static final int PAD = 50;
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel(new GridLayout(0, 1, PAD, PAD));
p.setBorder(BorderFactory.createEmptyBorder(PAD, PAD, PAD, PAD));
p.add(new JButton("Test Button 1"));
p.add(new JButton("Test Button 2"));
f.add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}
testbutton.setBounds(0, 0, 55, 55);
testbutton.setLocation(50, 50);
testbutton2.setBounds(55, 0, 44, 44);
testbutton2.setLocation(50, 100);
摆脱那些声明,因为那样什么都不做。
它们什么也不做,因为 JFrame 内容窗格的默认布局管理器是 BorderLayout
。 BorderLayout
将重置每个组件的 size/location。
BorderLayout
希望您在将组件添加到框架时提供 "constraint"。如果您不提供约束,则使用 "CENTER"。只能将一个组件添加到 "CENTER",因此只会显示最后添加的按钮。
理解使用 BorderLayout
基本概念的简单解决方案是使用:
//frame.add(testbutton2);
//frame.add(testbutton);
frame.add(testbutton2, BorderLayout.PAGE_START);
frame.add(testbutton, BorderLayout.PAGE_END);
这将在两行中显示按钮。
阅读 Layout Managers 上的 Swing 教程以获取更多信息和示例。下载演示代码并修改代码将遵循 Swing 约定。
例如,在使框架可见之前,您需要向框架添加组件。所以代码的顺序应该是:
frame.add(...);
frame.add(...);
frame.pack();
frame.setVisible(true);