【问题标题】:Draw Line in a JLabel and add as JPanel in a JFrame does not function在 JLabel 中画线并在 JFrame 中添加为 JPanel 不起作用
【发布时间】:2014-06-29 00:56:38
【问题描述】:

我是 Java 新手,很抱歉有任何愚蠢的问题。

这是我的问题:

我只想画一条线 - 如果我将 JLabel Myline() 直接添加为 labelJFrame MyFrame,那么它将显示在生成的 JFrame-Dialogwindow 中,但如果我添加MyLine()JPanel panelpanelMyFrame 然后没有线路。

为什么?

package examples;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;


public class Bsp {

    public static void main(String[] args) {

        JFrame frame = new MyFrame();

    }

}

class MyFrame extends JFrame {

    private class MyLine extends JLabel {

        int width;

        public MyLine(int width) {
            this.width=width;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.BLACK);
            g.drawLine(0, 0, getWidth(), 0); 
            g.dispose();


        }

    }

    public MyFrame() {

        JLabel label=new MyLine(getWidth());
        JPanel panel=new JPanel(new GridBagLayout());

        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(3, 1));

        panel.add(label);


        add(new JButton("A"));
        add(new JButton("B"));
        add(panel);


        pack();

        setVisible(true);


    }



}

【问题讨论】:

    标签: java swing jpanel jlabel


    【解决方案1】:

    MyFrame 没有首选尺寸,直到pack() 询问封闭组件的首选尺寸。给MyLine 一个首选大小以查看效果。另见Initial Threads

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.GridBagLayout;
    import java.awt.GridLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Bsp {
    
        public static void main(String[] args) {
            JFrame frame = new MyFrame();
        }
    }
    
    class MyFrame extends JFrame {
    
        private class MyLine extends JLabel {
    
            int width;
    
            public MyLine(int width) {
                this.width = width;
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.setColor(Color.BLACK);
                g.drawLine(0, 0, getWidth(), getHeight());
                g.dispose();
            }
    
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(width, 16);
            }
    
        }
    
        public MyFrame() {
    
            JLabel label = new MyLine(32);
            System.out.println(getWidth());
            JPanel panel = new JPanel(new GridBagLayout());
    
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLayout(new GridLayout(3, 1));
    
            panel.add(label);
    
            add(new JButton("A"));
            add(new JButton("B"));
            add(panel);
            pack();
            setVisible(true);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多