Java 按钮小按钮
我正在写一个swing程序。但问题是我想要的JButton是小的。它应该由我来决定它的高度和宽度,但下面的代码创建了一个长的水平按钮Java 按钮小按钮,java,swing,layout,jbutton,border-layout,Java,Swing,Layout,Jbutton,Border Layout,我正在写一个swing程序。但问题是我想要的JButton是小的。它应该由我来决定它的高度和宽度,但下面的代码创建了一个长的水平按钮 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingExample { //Create the GUI and show it. For thread safety, this method should be
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingExample
{
//Create the GUI and show it. For thread safety, this method should be
//invoked from the event-dispatching thread
private static void createAndShowGUI()
{
//create and setup the window
JFrame frame=new JFrame("Swing Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set the size of the window
frame.setPreferredSize(new Dimension(300,300));
//Centre the window on the screen
WinUtilities wu=new WinUtilities();
wu.centerWindow(frame);
//Create a panel
JPanel panel=new JPanel(new BorderLayout());
//Create three buttons
//Button1
JButton But1=new JButton("Add");
But1.setText("Add Data");
But1.setSize(new Dimension(10,20)); //Using it has no effect
But1.setMnemonic('A');
But1.setMargin(new Insets(12,7,20,10)); //Using it has no effect
But1.setBorder(null); //Using it has no effect
panel.add(But1,BorderLayout.WEST);
//Button2
JButton But2=new JButton("Edit");
But2.setText("Edit Data");
But2.setMnemonic(KeyEvent.VK_E);
But2.setPreferredSize(new Dimension(5,5));
panel.add(But2,BorderLayout.CENTER);
//Button3
JButton But3=new JButton("Display");
But3.setText("Display Data");
But3.setMnemonic(KeyEvent.VK_D);
But3.setPreferredSize(new Dimension(5,5));
panel.add(But3,BorderLayout.EAST);
//Set window characteristics
frame.setContentPane(panel);
//frame.add(panel);
frame.pack();
//Display the window
frame.setVisible(true);
}
public static void main(String args[])
{
//Schedule a job for the event dispatching thread
//creating and showing this application's GUI
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
class WinUtilities
{
public void centerWindow(JFrame frm)
{
frm.setLocationRelativeTo(null);
}
}
例如,请提供帮助
暗示
已在APIJPanel
中实现(非常接受FlowLayout
)PreferredSize
- 那么
可能是错误的BoderLayout
LayoutManager
- 或者使用
(那么所有GridLayout
将根据最大的项目具有相同的大小)JButtons
已在APIJPanel
中实现(非常接受FlowLayout
)PreferredSize
- 那么
可能是错误的BoderLayout
LayoutManager
- 或者使用
(那么所有GridLayout
将根据最大的项目具有相同的大小)JButtons
按钮很大,因为:
- 您已将框架的首选尺寸设置为300x300
- 您已将内容的布局设置为BorderLayout
- 钮扣被放大以适应如此大的框架
- 但是1.设置大小(…);被忽略-您应该始终调用:setMinimumSize/setMaximumSize/setPreferredSize。相反,布局根据约束确定大小 不太可能显示文本:“编辑数据”、“添加数据”,在大小为5x5的首选按钮上,考虑使用图标或使按钮更大。
- 您已将框架的首选尺寸设置为300x300
- 您已将内容的布局设置为BorderLayout
- 钮扣被放大以适应如此大的框架
- 但是1.设置大小(…);被忽略-您应该始终调用:setMinimumSize/setMaximumSize/setPreferredSize。相反,布局根据约束确定大小 不太可能显示文本:“编辑数据”、“添加数据”,在大小为5x5的首选按钮上,考虑使用图标或使按钮更大。
LayoutManager
(BorderLayout
不适合您的需要)。查看将立即显示合适的候选者,例如FlowLayout
,只需使用合适的LayoutManager
(BorderLayout
不适合您的需要)。查看将立即显示合适的候选项,例如FlowLayout
?@trashgood不知道这一点。还在考虑如何根据图形设计(严格的尺寸)而不是布局管理器来布局组件,但不要使其超过首选尺寸。?@trashgood不知道这一点。仍然在考虑如何根据图形设计(严格的尺寸)而不是布局管理器来布局组件,但不要使其超过首选尺寸。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingExample {
private static void createAndShowGUI() {
JFrame frame = new JFrame("Swing Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton but1 = new JButton("Add");
but1.setText("Add Data");
but1.setMnemonic('A');
but1.setBorderPainted(false);
but1.setBackground(Color.red);
but1.setBorder(null);
but1.setFocusable(false);
but1.setMargin(new Insets(0, 0, 0, 0));
//but1.setContentAreaFilled(false);
panel.add(but1);
JButton but2 = new JButton("Edit");
but2.setText("Edit Data");
but2.setMnemonic(KeyEvent.VK_E);
panel.add(but2);
JButton but3 = new JButton("Display");
but3.setText("Display Data");
but3.setMnemonic(KeyEvent.VK_D);
panel.add(but3);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}