当前位置: 首页 > 知识库问答 >
问题:

如何更改JSplitPane的颜色

胥玮
2023-03-14

我在读一本关于swing的书时编写了一个小程序,它在两个标签之间创建了一个JSplitPane。问题是,JSplitPane几乎看不见(至少在我的操作系统MAC OS Lion中是这样),而且在它上面设置一些属性(如前景色)似乎不起作用。

代码如下:

//Demonstrate a simple JSplitPane


package swingexample4_6;

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

public class SplitPaneDemo {

    //constructor
    public SplitPaneDemo()
    {
        //Create a new JFrame container.
        //Use the default border layout
        JFrame jfrm = new JFrame("Split Pane Demo");

        //Give the frame an initial size
        jfrm.setSize(380, 150);

        //Terminate the program when the user closes the application
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //--Make two labels to show the split pane
        JLabel jlab = new JLabel(" Left side: ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        JLabel jlab2 = new JLabel(" Right side: ABCDEFGHIJKLMNOPQRSTUVWXYZ");

        //Set the minimum size for each label
        //This step is not technically needed to use a split pane,
        //but it enables the split pane resizing features to be
        //used to their maximum extent
        jlab.setMinimumSize(new Dimension(90, 30));
        jlab2.setMinimumSize(new Dimension(90, 30));

        //--Create a split pane
        JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, jlab, jlab2);

        //Code to get a list of component names in the console
        Component[] listComponents = jsp.getComponents();

        String theList;
        for (Component myComponent: listComponents)
        {
            theList = myComponent.toString();
            System.out.println(theList);
        }


        //Add the split pane to the content pane
        jfrm.getContentPane().add(jsp);

        //Display the frame
        jfrm.setVisible(true);
    }

    public static void main(String[] args) {
        //Create the frame on the event dispatching thread
        SwingUtilities.invokeLater(new Runnable(){

            @Override
            public void run() {
                new SplitPaneDemo();
            }

        });
    }
}

有没有什么办法可以改变它的颜色,让它真正脱颖而出?非常感谢。

共有2个答案

孟俊发
2023-03-14

JLabel默认是NON_Opaque,简单是透明的,你可以

>

  • JLabels更改为JComponentJPanel可能会更好

    更改不透明度JLabel#setOpaque(true)

  • 姜学海
    2023-03-14

    您可以使用拆分窗格。背景属性,如下所示。

    import javax.swing.*;
    import java.awt.*;
    
    /** @see http://stackoverflow.com/a/10110232/230513 */
    public class SplitPaneDemo {
    
        //constructor
        public SplitPaneDemo() {
            JFrame jf = new JFrame("Split Pane Demo");
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            //--Make two labels to show the split pane
            JPanel left = content("Left side: ");
            JPanel right = content("Right side: ");
    
            //--Create a split pane
            JSplitPane jsp = new JSplitPane(
                JSplitPane.HORIZONTAL_SPLIT, true, left, right);
            jsp.setDividerLocation(0.5f);
    
            //Add the split pane to the frame's content pane
            jf.add(jsp);
            jf.pack();
    
            //Display the frame
            jf.setLocationRelativeTo(null);
            jf.setVisible(true);
    
            //Code to get a list of component names in the console
            for (Component myComponent : jsp.getComponents()) {
                System.out.println(myComponent);
            }
        }
    
        private JPanel content(String s) {
            final JLabel label = new JLabel(s + "Some text.", JLabel.CENTER);
            JPanel panel = new JPanel(new GridLayout()) {
    
                @Override
                public Dimension getPreferredSize() {
                    Dimension d = label.getPreferredSize();
                    return new Dimension(d.width * 2, d.height * 3);
                }
            };
            panel.setOpaque(true);
            panel.setBackground(new Color(0xffffffc0));
            panel.add(label);
            return panel;
        }
    
        public static void main(String[] args) {
            UIManager.put("SplitPane.background", new Color(0xff8080ff));
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new SplitPaneDemo();
                }
            });
        }
    }
    
     类似资料:
    • 问题内容: 我在阅读有关挥杆的书时编写了一个小程序,该程序在两个标签之间创建了一个JSplitPane。问题在于,几乎看不到JSplitPane(至少在我的操作系统- MAC OS Lion中),并且在其上设置某些属性(如前景色)似乎不起作用。 这是代码: 有什么方法可以改变它的颜色,使其真正脱颖而出吗?谢谢。 问题答案: 是默认设置,简单是透明的,您可以 更改为或可能更好 通过改变不透明度

    • 问题内容: 我用过,但它们不起作用,颜色就像橙色,无法更改。 问题答案: 我认为这些价值观适合您

    • 问题内容: 我可以改变颜色吗?标准颜色是蓝色。而且它与标准iOS应用程序非常接近。是否可定制?我该如何改变颜色?例如按钮颜色。 谢谢! 问题答案: 您可以只更改基础视图的,但是由于iOS 9(https://openradar.appspot.com/22209332)中引入的一个已知错误,因此tintColor被应用程序窗口的覆盖。 您可以: 在AppDelegate中更改应用程序。 } 在完成

    • 问题内容: 我使用Angular-Chart.js(AngularJS Chart.js版本)创建条形图。图表使用颜色以外的选项。 即使我在文档中进行了设置,它们仍保持灰色。 实际上,这些选项有效,但颜色无效。难道我做错了什么? 问题答案: 您应该将对象声明为数组 plnkr

    • 我从服务器接收图像,然后根据用户选择的颜色,图像颜色将发生变化。 我尝试了以下方法: 我得到了与我的目标相反的结果(UIImage外部的白色是用所选颜色着色的)。 出了什么问题? 在这个问题上我也需要这样做,提供的解决方案不能解决我的问题。如何更改iOS和WatchKit中的图像颜色

    • 问题内容: 我正在编写一个简单的扫雷游戏,现在可以运行,但是我正在处理一些漂亮的细节,例如使每个数字使用不同的颜色。 尝试在上设置文本颜色时,我总是遇到错误。我可以很容易地更改文本和背景,但是不能专门更改文本颜色。 导致一切混乱的部分是: 由于某种原因,我的错误是: 每当我尝试编译时都会发生这种情况,但是当我将其更改为说而不是正常工作时,就会发生这种情况。 问题答案: 对于JButton未定义。要