【问题标题】:Resizing BasicArrowButton调整基本箭头按钮的大小
【发布时间】:2017-04-26 18:17:30
【问题描述】:

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

主类:

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);

}
}

【问题讨论】:

    标签: java swing layout resize


    【解决方案1】:

    问题是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);
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      相关资源
      最近更新 更多