java - 调整基本箭头按钮的大小

标签 java swing layout resize

我正在尝试让 BasicArrowButton 组件调整大小,但无法让它为我工作。下面的代码是问题的一个简单得多的版本,但仍然演示了我正在尝试做的事情。该按钮位于 JPanel 中,面板的布局设置为 FlowLayout。它需要调整大小,同时仍保留在具有相同布局的面板中。提前致谢,对于格式错误深表歉意:

主类:

package PackageMain;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Main {

public static JFrame frame = new JFrame("Window");
public static PanelOne p1;
public static PanelTwo p2;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setBounds(100, 100, 800, 600);
                p1 = new PanelOne();
                frame.setVisible(true);
            } catch(Exception e){

            }
        }
    });
}
}

第二类:

package PackageMain;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JPanel;
import javax.swing.plaf.basic.BasicArrowButton;

public class PanelOne{

public PanelOne(){
    FlowLayout fl = new FlowLayout();
    BasicArrowButton b1 = new BasicArrowButton(BasicArrowButton.WEST);
    JPanel p1 = new JPanel();
    p1.add(b1);
    p1.setLayout(fl);
    b1.setPreferredSize(new Dimension(100, 100)); //DOESN'T WORK!
    Main.frame.add(p1);

}
}

最佳答案

问题在于 BasicArrowButton 类重写了 getPreferredSize() 方法。因此,您要么需要使用不支持此方法的布局,要么为此方法提供您自己的实现。

第一个提案:

import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicArrowButton;

public class BasicArrowButtonTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frm = new JFrame("Test arrow button");
                JPanel p = new JPanel(new GridLayout(1, 1));
                p.setPreferredSize(new Dimension(100, 100));
                p.add(new BasicArrowButton(BasicArrowButton.WEST));
                frm.add(p);
                frm.pack();
                frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frm.setLocationRelativeTo(null);
                frm.setVisible(true);
            }
        });
    }
}

第二个提案:

package org.swingsamples.label;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicArrowButton;

public class BasicArrowButtonTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frm = new JFrame("Test arrow button");
                JPanel p = new JPanel(new FlowLayout());
                BasicArrowButton btn = new BasicArrowButton(BasicArrowButton.WEST) {
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(100, 100);
                    }
                };
                p.add(btn);
                frm.add(p);
                frm.pack();
                frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frm.setLocationRelativeTo(null);
                frm.setVisible(true);
            }
        });
    }
}

关于java - 调整基本箭头按钮的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41091420/

相关文章:

css - 在底部显示页脚

java - 实现基于注解的Spring AspectJ (JavaConfig)

java - 如何使用 UUID 生成唯一的正 Long

Java 调用由 GCC 编译的 C 库有效,但在使用 G++ 编译时失败

java - 围绕应用程序包装 Applet

java - JTextField 有 getEditor() 方法吗?

java - Android textClock拉伸(stretch)到屏幕宽度和高度

java - 使用 Eclipse Code Formatter for Java 在 if() 中的条件缩进

java - 动画不添加到 JFrame

android - 如何将图标放在 Android 中圆形图像的顶部?