【问题标题】:Set image at proper position in Border layout in java swing在java swing中的Border布局中将图像设置在适当的位置
【发布时间】:2011-09-07 14:04:13
【问题描述】:

我正在使用一个 JDialog,我在其中添加了一个 JPanel。 Jpanel的布局是BorderLayout。现在我有一些信息和要在该面板中显示的图像。所以我在 Border.Center 中添加了所有信息,并在 Border.south 中添加了图像。但是图像没有正确定位。以下内容可能有助于理解:

图像显示在底部和水平中心。但我想要的是图像应该显示在 Border.south 的左上角。我怎样才能做到这一点?可能吗 ?

编辑:-

public static void main(String[] args) {
    JDialog dialog = new JDialog();
    dialog.setSize(350, 350);
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    JScrollPane scroll = new JScrollPane(panel);

    JEditorPane textPane = new JEditorPane();
    textPane.setContentType("text/html");
    StringBuffer buffer = new StringBuffer();
    buffer.append(String.format("<div><b>Name:</b>%s</div>", "Harry"));
    buffer.append(String.format("<div><b>Id:</b>%s</div>", "Joy"));
    textPane.setText(buffer.toString());

    panel.setBackground(Color.white);
    panel.add(textPane,BorderLayout.CENTER);
    JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
    JLabel lbl = new JLabel("Image will be here.");
    lbl.setFont(new Font(Font.SANS_SERIF,0,40));
    jPanel.add(lbl);
    panel.add(jPanel,BorderLayout.SOUTH);
    dialog.add(scroll);
    dialog.setVisible(true);
}

在这段代码中,我添加了一个 JLabel(“图像将在此处。”)而不是图像来表示情况。

【问题讨论】:

    标签: image swing border-layout


    【解决方案1】:

    JPanelFlowLayout(FlowLayout.LEFT) 添加到SOUTH。将图像添加到 JPanel,它应该会出现在 SOUTH 区域的左上角。

    【讨论】:

    • @Andrew:通过这样做,这张图片出现在左侧而不是顶部。我也尝试过 FlowLayout.Leading 但输出相同。
    • @Harry:我可以问:您还向JPanel 添加了什么?或JPanel 的首选尺寸是多少?或其他十几个问题,但我会说 - 为了尽快获得更好的帮助,请发布SSCCE。对于这种性质的 SSCCE,您可以将图像替换为用于表示图像的组件、在代码中生成图像或热链接到网络上可用的图像(例如,在我的 media page)。
    • @Andrew:我发现border.south 的高度只与图像高度相同,因此会出现文本和图像之间的空间。
    • @Harry:你对 S-SC-C-E 的哪一部分有理解困难?代码 sn-ps 构成 SSCCE。请阅读链接。
    • @Andrew:是的,不是 SSCCE。这是我的代码。我认为发布我的代码会有所帮助。好的,我很快就会发布一个小例子。
    【解决方案2】:

    如果有人知道TableLayout,那很容易做到。

    double p = TableLayout.PREFERRED;
    double f = TableLayout.FILL;
    double[][] sizes = {
        {p,f},
        {p,p,f}
    };
    
    panel.setLayout(new TableLayout(sizes));
    
    panel.add(textPane, "0,0, 1,0");
    panel.add(jPanel, "0,1");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多