【问题标题】:Change EmptyBorder space colour更改 EmptyBorder 空间颜色
【发布时间】:2012-12-29 19:43:29
【问题描述】:

有谁知道是否可以更改BorderFactory.createEmptyBorder() 方法提供的空白空间的颜色。默认情况下,它总是将其设置为白色 - 我想将其设置为我的 JFrame 背景的任何颜色(即灰色)。

【问题讨论】:

    标签: java swing colors border


    【解决方案1】:

    您想要一个有颜色的空边框吗?空边框的要点是它不占用空间。没有空间的东西不可能有颜色。你想要一个线条边框吗?

    BorderFactory#createLineBorder(Color color)

    【讨论】:

    • 空边框可以有大于0的插入。空边框的目的是不画任何东西!
    • 我问这个的原因是由于某种原因,如果我有任何内容而不是 emptyBorder,我的光标会从文本窗格的右侧消失。请在此处查看我之前的问题...stackoverflow.com/questions/14340851/…
    • 我想我的问题应该是为什么当我有一个空边框时光标会出现,而当我使用任何其他边框类型时却没有?
    • @maloney:查看您上一个问题的答案。
    • -1 - 正如@GuillaumePolet 已经指出的那样,答案是......错误;-) 想知道:怎么会有人(或三个机构)对此表示赞同?
    【解决方案2】:

    对添加到内容窗格的面板应用空边框和颜色(或“非”表示纯色)。

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    
    public class PlainColoredEmptyBorder {
    
        public static void main(String[] args) {
            Runnable r = new Runnable() {
    
                @Override
                public void run() {
                    // the GUI as seen by the user (without frame)
                    JPanel gui = new JPanel(new BorderLayout());
                    gui.setBorder(new EmptyBorder(20, 30, 20, 30));
    
                    JTree tree = new JTree();
                    tree.setVisibleRowCount(4);
                    gui.add(new JScrollPane(tree));
                    gui.setBackground(Color.BLUE);
    
                    JFrame f = new JFrame("Demo");
                    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);
        }
    }
    

    【讨论】:

    • 在 JTextField 上使用此方法仍会在框周围产生空白。有什么方法可以做到这一点,当点击到最右边时仍然显示光标?
    【解决方案3】:

    为什么当我有一个空边框时光标会出现,而当我使用任何其他边框类型时却没有?

    因为空边框是唯一不绘制的Border。任何其他类型的边框都将绘制在文本窗格光标上。

    将您的文本窗格放在具有背景颜色的JPanel 内也不起作用,因为您的文本窗格将在父JPanel 之后绘制。

    【讨论】:

      【解决方案4】:

      设置文本字段的背景颜色并将其设置为不透明可以解决此问题

      【讨论】:

        猜你喜欢
        • 2020-10-11
        • 2012-01-03
        • 1970-01-01
        • 2016-09-11
        • 2013-09-08
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        相关资源
        最近更新 更多