我想弄清楚为什么我看不到我的标签就像当我试图将2个标签放入1个面板中时它们消失了,我唯一可以看到让它起作用的方法就是如果我将所有内容添加到{{1没有任何类型的层次结构。
override func viewDidLoad() {
super.viewDidLoad()
let tableView = self.tableView
let containerView = UIView(frame: self.view.bounds)
containerView.addSubview(tableView)
containerView.addSubview(spinner)
view = containerView
spinner.translatesAutoresizingMaskIntoConstraints = false
view.addConstraint(NSLayoutConstraint(item: spinner, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: spinner, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0))
spinner.startAnimating()
}
答案 0 :(得分:4)
由于您发布了大量代码而且我不确定您要实现的目标,因此我修改了代码,在JLabel
添加了3 topPane
s。在JRadioButtons
上有3 ButtonGroup
(我没有添加JPanel
),我评论了如何使它们在垂直和水平对齐上显示。
你应该考虑的事情是:
不要从JFrame
扩展和创建对象(一个或另一个,不是两个,我建议您创建对象)。
您在向添加组件后给JPanel
布局,应该之前。
从上述观点来看,您还将布局提供给JLabel
而不是JPanel
。
您正在JList
添加JLabel
。
你也错过了一个类构造函数。
下次发布没有依赖关系的代码,例如Truck
,Car
和Motorcycle
类(即Runnable example)。并使用纯文本,以便我们可以复制粘贴代码并查看问题。也尝试发布图像(或链接,我们可以编辑添加它)。
现在,我自己的计划的结果是:
使用以下代码完成。
import javax.swing.*;
import java.awt.*;
public class GUIExample {
JFrame frame;
JLabel label1, label2, label3;
JPanel topPane, radioPane;
JRadioButton radio1, radio2, radio3;
public static void main(String[] args) {
new GUIExample();
}
GUIExample () {
frame = new JFrame();
topPane = new JPanel();
radioPane = new JPanel();
topPane.setLayout(new FlowLayout());
// radioPane.setLayout(new BoxLayout(radioPane, BoxLayout.PAGE_AXIS)); //Vertical align
radioPane.setLayout(new FlowLayout()); //Horizontal align
label1 = new JLabel("Car");
label2 = new JLabel("Motorcycle");
label3 = new JLabel("Truck");
radio1 = new JRadioButton("Radio1");
radio2 = new JRadioButton("Radio2");
radio3 = new JRadioButton("Radio3");
topPane.add(label1);
topPane.add(label2);
topPane.add(label3);
radioPane.add(radio1);
radioPane.add(radio2);
radioPane.add(radio3);
frame.add(topPane, BorderLayout.PAGE_START);
frame.add(radioPane, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
答案 1 :(得分:3)
您的代码有几个问题,但您没有看到tireLabel或tbuttons组件的原因是因为您使用的是JLabel。了解JLabel不是为了充当其他组件的容器而构建的。关键概念是它根据它所持有的文本和/或它所拥有的图标计算其首选大小(这是关键)不是它可能包含的任何组件的大小或首选大小 。
解决方案是不要将JLabel用于其不打算使用的目的,而是使用JPanel,它根据其所保持的组件的大小及其布局调整其自己的首选大小。
其他无关的问题: