【问题标题】:JAVA positioning labels on JFRAMEJFRAME上的JAVA定位标签
【发布时间】:2017-12-02 10:48:31
【问题描述】:

我需要画一个水平直方图,我正在设置直方图的标签如下,

代码

public static void drawVertical(){

 JFrame frame = new JFrame("Horizontal Histogram");
 frame.setSize(300, 300);
 frame.setVisible(true);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      


 JLabel label_01=new JLabel("0-29");  
 label_01.setAlignmentX(-290);
 label_01.setAlignmentY(290);

 JLabel label_02=new JLabel("30-39"); 
 label_02.setAlignmentX(-290);
 label_02.setAlignmentY(270);

 JLabel label_03=new JLabel("40-69"); 
 label_03.setAlignmentX(-290);
 label_03.setAlignmentY(250);

 JLabel label_04=new JLabel("70-100"); 
 label_04.setAlignmentX(-290);
 label_04.setAlignmentY(230);

 frame.add(label_01);
 frame.add(label_02)
 frame.add(label_03);
 frame.add(label_04);
 }

但这是我得到的输出:(

输出

这是我的预期输出(用 MS 油漆编辑),

预期输出

谁能弄清楚这里有什么问题?
为什么没有显示其他标签?

【问题讨论】:

    标签: java swing user-interface netbeans


    【解决方案1】:

    这个问题的答案是你不应该使用BorderLayoutJFrame 默认使用),而应该使用GridLayout。这将允许您将JLabels 添加到您的JFrame。一个示例如下所示:

    EventQueue.invokeLater(() -> {
        JFrame frame = new JFrame("Stackoverflow | Question");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        // This is the important line. This will Change the layout to a GridLayout.
        frame.setLayout(new GridLayout(4, 1));
        frame.add(new JLabel("0-29"));
        frame.add(new JLabel("30-39"));
        frame.add(new JLabel("40-69"));
        frame.add(new JLabel("70-100"));
        frame.setVisible(true);
    });
    

    【讨论】:

    • 在框架的内容窗格中添加组件时无需使用getContentPane()。您只需将组件添加到框架中,框架就会将其添加到内容窗格中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2015-01-07
    • 2021-02-26
    • 2021-12-08
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多