3

我想在 Swing 中创建类似以下内容:

在此处输入图像描述

顶部相对简单:我可以创建一个表格并显示它。我遇到的问题是底部的方形加号和减号按钮,它们分别用于添加新项目或删除所选项目。特别是,我无法制作方形,因为在 Mac OS X 和其他一些平台上,JButton 是带圆角的矩形,我找不到改变它的方法。另外,我想确保它是一个完美的正方形,并且按钮之间没有任何空间。

这如何在 Swing 上以跨平台的方式实现?

4

4 回答 4

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类。

于 2013-04-27T21:57:11.903 回答
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);
    }
}
于 2013-04-28T05:09:56.410 回答
1

您可以使用setPreferredSize()设置按钮的大小:

JButton button = new JButton("+");
button.setPreferredSize(new Dimension(10, 10));

您可以使用以下方法删除圆角:

button.setBorder(BorderFactory.createEmptyBorder());

如果这不起作用,那么您可以覆盖 JButton 上的paintComponent()方法。

于 2013-04-27T21:52:45.780 回答
-1

好吧,为了使它们成为方形,您有 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 或您要添加的任何东西上,并将其设置到屏幕底部,如上图所示。

希望这可以帮助!

于 2013-04-27T21:53:11.523 回答