Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 杰拉贝尔没有出现,我错过了什么?_Java_Swing_User Interface - Fatal编程技术网

Java 杰拉贝尔没有出现,我错过了什么?

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

我正在为我的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 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
    的默认值,因此您不需要它
  • 不要
    setSize
    a
    JFrame
    ,而是使用
    pack
  • 在调用
    pack
    setVisible
    之间的帧上调用
    setLocationRelativeTo(null)
    ,将使帧在屏幕上居中

我建议您使用GridLayout,它易于使用,并且适合您的示例

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”选项打开窗口。