我想在 Swing 中创建类似以下内容:
顶部相对简单:我可以创建一个表格并显示它。我遇到的问题是底部的方形加号和减号按钮,它们分别用于添加新项目或删除所选项目。特别是,我无法制作方形,因为在 Mac OS X 和其他一些平台上,JButton 是带圆角的矩形,我找不到改变它的方法。另外,我想确保它是一个完美的正方形,并且按钮之间没有任何空间。
这如何在 Swing 上以跨平台的方式实现?
JButtons 是带圆角的矩形,我找不到改变它的方法。
更改边框:
button.setBorder( new LineBorder(Color.BLACK) );
编辑。
另一种方法是从现有按钮创建自己的图标。类似于以下内容:
JButton button = new JButton("+");
Dimension size = button.getPreferredSize();
size.x += 6;
size.y += 6;
button.setPreferredSize(size);
Rectangle rectangle = new Rectangle(3, 3, size.x - 3, size.y - 3);
ScreenImage buttonImage = ScreenImage(button, rectangle);
ImageIcon icon = new ImageIcon(buttonImage);
JButton plus = new JButton(icon);
plus.setBorder( ... );
上面的代码应该在任何平台上创建按钮的图像。我增加了首选尺寸以避免拍摄边框图像。
您将需要使用Screen Image类。
这最容易通过返回首选大小 NxN 来实现 - 其中 N 是首选宽度或高度中的较大者。
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
class SquareButton extends JButton {
SquareButton(String s) {
super(s);
}
@Override
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
int s = (int)(d.getWidth()<d.getHeight() ? d.getHeight() : d.getWidth());
return new Dimension (s,s);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
JComponent gui = new JPanel(new FlowLayout());
for (int ii=0; ii<5; ii++) {
gui.add(new SquareButton("" + ii));
}
gui.setBorder(new EmptyBorder(4, 8, 4, 8));
JFrame f = new JFrame("Square 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();
// should be done last, to avoid flickering, moving,
// resizing artifacts.
f.setVisible(true);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
SwingUtilities.invokeLater(r);
}
}
您可以使用setPreferredSize()设置按钮的大小:
JButton button = new JButton("+");
button.setPreferredSize(new Dimension(10, 10));
您可以使用以下方法删除圆角:
button.setBorder(BorderFactory.createEmptyBorder());
如果这不起作用,那么您可以覆盖 JButton 上的paintComponent()方法。
好吧,为了使它们成为方形,您有 2 个选项: 1. 使按钮保持一个透明图像的方形图像的图标图像。2.您可以自己设置按钮尺寸。我不确定如何设置尺寸,但这是您可以选择的一个选项。您可以在添加时创建一个设置在窗口的 BorderLayout.SOUTH 端的 JToolBar,并且添加到其中的任何按钮都将彼此相邻。要添加按钮,请执行以下操作:
JButton button1 = new JButton("+");
JButton button2 = new JButton("-");
JToolBar toolbar = new JToolBar();
<JPanel,JFrame,Whatever>.add(toolbar, BorderLayout.SOUTH);
toolbar.add(button1);
toolbar.add(button2);
这会将工具栏添加到 JFrame、JPanel 或您要添加的任何东西上,并将其设置到屏幕底部,如上图所示。
希望这可以帮助!