我正在写一个摇摆计划。但问题是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
//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);
}
}
请帮助
答案 0 :(得分:3)
例如
建议
JPanel
已在API FlowLayout
中实施(非常接受PreferredSize
),
然后BoderLayout
可能是错误的LayoutManager
,
或使用GridLayout
(然后所有JButtons
将具有相同的大小,基于最大的项目)
码
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();
}
});
}
}
答案 1 :(得分:1)
按钮很大,因为:
只需删除frame.setPreferredSize(),按钮就会很小(帧大小将由内部组件的首选大小通过调用frame.pack()方法确定)。
顺便说一下: