我想在Swing中创建类似下面的内容:
顶部相对容易:我可以创建一个表并显示它。我遇到的问题是底部的方形加号和减号按钮,它们分别用于添加新项目或删除所选项目。特别是,我无法制作方形,因为在Mac OS X和其他一些平台上,JButtons是带圆角的矩形,我找不到改变它的方法。此外,我想确保它是一个完美的正方形,按钮之间没有任何空间。
如何在Swing上以跨平台的方式实现这一目标?
答案 0 :(得分:5)
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类。
答案 1 :(得分:4)
最容易通过返回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);
}
}
答案 2 :(得分:1)
您可以使用setPreferredSize():
设置按钮的大小JButton button = new JButton("+");
button.setPreferredSize(new Dimension(10, 10));
<击> 您可以使用以下方法删除圆角:
button.setBorder(BorderFactory.createEmptyBorder());
击> <击> 撞击>
如果这不起作用,那么您可以覆盖JButton上的paintComponent()方法。
答案 3 :(得分:1)
这是自定义按钮设计的好教程。
答案 4 :(得分:-1)
为了使它们成为正方形,你有两个选择:1。使按钮保持一个只有透明图像的方形图像的图标图像。 2.您可以自己设置按钮尺寸。我不确定如何设置尺寸,但这是一个你可以选择的选项。你可以创建一个JToolBar,它在你添加时在窗口的BorderLayout.SOUTH端设置,并且添加到其上的任何按钮都将紧挨着彼此。要添加按钮,请执行以下操作:
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或其他任何内容上,如上所示,它会将其设置到屏幕底部。
希望这有帮助!