gpt4 book ai didi

java - 在 JLabel 中画线并添加为 JFrame 中的 JPanel 不起作用

转载 作者:行者123 更新时间:2023-11-29 05:21:36 24 4
gpt4 key购买 nike

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

这是我的问题:

我只想画一条线 - 如果我将 JLabel Myline() 作为 label 直接添加到 JFrame MyFrame ,然后它将显示在生成的 JFrame-Dialogwindow 中,但是如果我将 MyLine() 添加到 JPanel panelpanelMyFrame 然后就没有Line了。

为什么?

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


}



}

最佳答案

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

image

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

}
}

关于java - 在 JLabel 中画线并添加为 JFrame 中的 JPanel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com