3

Swing で次のようなものを作成したいと思います。

ここに画像の説明を入力

上の部分は比較的簡単です。テーブルを作成して表示するだけです。私が問題を抱えているのは、下部にある正方形のプラス ボタンとマイナス ボタンで、それぞれ新しいアイテムを追加したり、選択したアイテムを削除したりするように設計されています。特に、Mac OS X やその他のプラットフォームでは、JButton は角の丸い長方形であり、それを変更する方法が見つからないため、正方形を作成できませんでした。また、ボタンの間にスペースがなく、完全な正方形であることを確認したいと考えています。

これは、Swing でクロスプラットフォームの方法でどのように達成できますか?

4

4 に答える 4

5

JButton は角が丸い長方形で、それを変更する方法が見つかりません。

ボーダーを変更する:

button.setBorder( new LineBorder(Color.BLACK) );

編集。

もう 1 つの方法は、既存のボタンから独自のアイコンを作成することです。次のようなもの:

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 に答える