Java 杰拉贝尔没有出现,我错过了什么?
我正在为我的GUI创建一个标签,如下所示:Java 杰拉贝尔没有出现,我错过了什么?,java,swing,user-interface,Java,Swing,User Interface,我正在为我的GUI创建一个标签,如下所示: import javax.swing.*; public class Runner { public static void main(String[] args) { final int FRAME_WIDTH = 516; final int FRAME_HEIGHT = 700; final JFrame myFrame = new JFrame(); myFrame.setTitle("Traveling Sa
import javax.swing.*;
public class Runner
{
public static void main(String[] args)
{
final int FRAME_WIDTH = 516;
final int FRAME_HEIGHT = 700;
final JFrame myFrame = new JFrame();
myFrame.setTitle("Traveling Saleman Problem - GA solution");
myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
final JPanel myPanel = new JPanel();
myPanel.setLayout(null);
final JLabel genLabel = new JLabel("Number of Generations");
genLabel.setLocation(85,515);
myPanel.add(genLabel);
myFrame.add(myPanel);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}}
我将它添加到面板,将面板添加到框架。我知道我这样做是对的,因为我在跑步时有按钮和文本字段显示。这个代码中有什么我遗漏的吗 您最大的问题是使用
null
布局。由于图形环境彼此不同,这必然会带来麻烦。必须考虑屏幕大小(和分辨率)和L&F等因素,这在null
布局中是不可能的
getContentPane().add(genLabel);
相反,您需要使用符合您需要的LayoutManager
。这实际上取决于整个GUI。这里我使用JPanel
的默认FlowLayout
:
public class Example {
public static void main(String[] args) {
JFrame myFrame = new JFrame("Traveling Saleman Problem - GA solution");
JPanel myPanel = new JPanel();
JLabel genLabel = new JLabel("Number of Generations");
JTextField textField = new JTextField(10);
myPanel.add(textField);
myPanel.add(genLabel);
myFrame.add(myPanel);
myFrame.pack();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}
}
注意事项:
是setVisible(true)
的默认值,因此您不需要它JLabel
- 不要
asetSize
,而是使用JFrame
pack
- 在调用
和pack
之间的帧上调用setVisible
,将使帧在屏幕上居中setLocationRelativeTo(null)
this.setLayout(new GridLayout(1,1));
JLabel text=new JLabel("Try");
myPanel.add(text);
添加组件后,您需要重新绘制/验证面板。是否可以发布更多代码来重现问题?1)为了更快获得更好的帮助,请发布(最小完整可验证示例)或(简短、自包含、正确的示例)。2) Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。相反,可以使用布局管理器,也可以使用布局填充和边框。我强烈建议不要使用空布局。而是根据您的布局要求选择合适的布局。您希望将元素相对放置在何处?我使用空布局,因为我正在硬编码位置,使用内部for循环创建按钮网格。我确信有更好的方法,但我对swing的了解有限。我知道有网格布局,但我在网格下面有文本字段。有没有一种方法可以像在android环境中那样添加多个布局?1)
setVisible
默认情况下是true
用于JLabel
。2) 不要设置边界,让布局经理来决定。我已经更改了我的响应。我正在设置边界,因为我有一个非常特定的位置来放置布局label@KDowling无法将零部件放置在特定位置,因为所有图形环境都不同。你不知道屏幕的大小,也不知道L&F(依赖操作系统)将如何处理确切的位置。好吧。。。我想既然框架是一个特定的尺寸,那就没关系了。那么,如何将标签设置到文本字段的右侧呢?GridLayout
如何满足OP的需要呢?他们没有提到他们需要一个网格。在OP的情况下,如果他只想在他的框架中添加JLabel,使用网格是很方便的。OP说“我有按钮和文本字段显示我何时运行”,这显然否定了“只想添加JLabel”。在任何情况下,GridLayout
在实际需要具有相同大小组件的网格时都很好。我确实需要具有相同大小组件的网格,但我也需要网格下方的文本字段和标签。你能告诉我如何在网格布局面板下面添加另一个面板吗?我为你写了一个例子:this.add(mypanel1,BorderLayout.NORTH);添加(mypanel2,BorderLayout.SOUTH)代码>使用“this”选项打开窗口。