6

Java で簡単なメニューを作成しましたが、ボタンのサイズを変更する方法がわかりません。私のメニューは次のようになります。 現在の外観

最後のボタンを他のボタンと同じサイズにしたい。

tlacTisk.setSize(10,10);
tlacTisk.setPreferredSize(10,10);

動作しません。

ボタンとボックスを作成したコード:

JButton tlacSVG = new JButton();
        tlacSVG.setText("Export do SVG");
        tlacSVG.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                exportujSVG();
            }
        });

        JButton tlacPNG = new JButton();
        tlacPNG.setText("Export do PNG");
        tlacPNG.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                exportujPNG();
            }
        });

        JButton tlacTisk = new JButton();
        tlacTisk.setText("Tisk...");
        tlacTisk.setPreferredSize(new Dimension(50, 25));
        tlacTisk.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                tiskni();
            }
        });


        Box boxTlacitek = Box.createVerticalBox();
        boxTlacitek.add(Box.createVerticalStrut(5));
        boxTlacitek.add(tlacSVG);
        boxTlacitek.add(Box.createVerticalStrut(10));
        boxTlacitek.add(tlacPNG);
        boxTlacitek.add(Box.createVerticalStrut(10));
        boxTlacitek.add(tlacTisk);
        boxTlacitek.setBorder(BorderFactory.createTitledBorder("Menu"));

        okno.add(boxTlacitek, BorderLayout.EAST);

サイズの変更方法を教えてください。ありがとう。

4

2 に答える 2

12

レイアウト マネージャーが異なれば、優先サイズの扱いも異なります。また、 size を で設定するsetSize()ことはお勧めできません。レイアウト マネージャーにレイアウトを任せてください。詳細と例については、レイアウト マネージャーのビジュアル ガイドを参照してください。

たとえば、ボタンを保持する別のパネルを作成できます。そのレイアウトを に設定しますGridLayout。このレイアウトでは、コンポーネントはそのセル内で使用可能なすべてのスペースを使用し、各セルはまったく同じサイズです。このパネルをコンテナーに追加します。例については、 GridLayout の使用方法を参照してください。

と の簡単なデモを次に示しGridLayoutますGridBagLayout

ここに画像の説明を入力

import java.awt.*;
import javax.swing.*;

public class DemoButtons {
    public DemoButtons() {
        final JFrame frame = new JFrame("Demo buttons");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel buttonPanel = new JPanel(new GridLayout(3, 1));
        buttonPanel.add(new JButton("Export do SVG"));
        buttonPanel.add(new JButton("Export do PNG"));
        buttonPanel.add(new JButton("Tisk..."));

        JPanel east = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.NORTH;
        gbc.weighty = 1;
        east.add(buttonPanel, gbc);

        JPanel center = new JPanel(){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }
        };
        center.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        frame.add(east, BorderLayout.EAST);
        frame.add(center);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new DemoButtons();
            }
        });
    }
}   
于 2013-03-28T16:20:56.367 に答える
3

ボタン (またはコンポーネント) のサイズを直接制御しようとしないでください。そのためには、コンテナー (この場合はメニューのパネル) のレイアウト マネージャー構成を使用してください。

これを行うには、さまざまな Swing Layout Managers を見てください: Swing Layout Managers

私は個人的には JGoodies フォーム API を好みます。これは、ユーザーにとってはるかに簡単で、長期にわたって維持することができると思います: JGoodies Forms API

よろしく

于 2013-03-28T16:24:40.367 に答える