当前位置: 首页 > 知识库问答 >
问题:

Java Swing响应绝对定位

罗诚
2023-03-14

我是java swing gui的新手,我无法解决这个问题让我们假设我有一个Jframe大小100,100我有4个按钮位置

        left top widht height
button1 0    0   10    10 // left up
button2 90   0   10    10 // right up
button3 45   45  10    10 // middle
button4 0    90  10    10 // left down
button5 90   90  10    10 // right down

所有左顶部宽度高度大小从100,100缩放。

我需要使用绝对定位(因为我的真实情况不同的左,顶,宽,高),但响应性我考虑也许我可以使用因子来倍增左,右,宽,高值

button1 0    0   40   20 // left up
button2 360  0   40   20 // right up
button3 180  90  40   20 // middle
button4 0    180 40   20 // left down
button5 360  180 40   20 // right down

编辑

我从不同的服务中得到左顶宽度高度,我的例子可以是这样的

        left top widht height
button1 01   04  11    14  
button2 91   0   10    10    
button3 44   45  9     14  
button4 0    90  10    10 
button5 90   90  1     1 

共有1个答案

万俟旭
2023-03-14

我需要使用绝对定位

当你认为你需要“绝对定位”时,你不需要。说真的,我从来没有需要使用一个没有通过其他方法解决的问题,无论是现有的布局还是自定义布局。

布局管理API的设计是为了完全满足您的要求,更好地利用它并节省您的头发。

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            // Common properties...
            gbc.weightx = 0.5;
            gbc.weighty = 0.333;
            // Top/left
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.anchor = GridBagConstraints.NORTHWEST;
            add(new JButton("Top left is all mine"), gbc);
            // Top/right
            gbc.gridx = 2;
            gbc.gridy = 0;
            gbc.anchor = GridBagConstraints.NORTHEAST;
            add(new JButton("Top right mine, keep out"), gbc);

            // middle
            gbc.gridx = 1;
            gbc.gridy = 1;
            gbc.anchor = GridBagConstraints.CENTER;
            add(new JButton("My precious"), gbc);

            // bottom/left
            gbc.gridx = 0;
            gbc.gridy = 2;
            gbc.anchor = GridBagConstraints.SOUTHWEST;
            add(new JButton("Got this space covered"), gbc);
            // bottom/right
            gbc.gridx = 2;
            gbc.gridy = 2;
            gbc.anchor = GridBagConstraints.SOUTHEAST;
            add(new JButton("Why is every one so unfriendly?"), gbc);
        }

    }

}
 类似资料:
  • 当一个元素的 position属性设置为 absolute 或 fixed,它将使用绝对定位。绝对定位的元素将从文档流中完全删除,它原先在正常文档流中所占的空间会关闭,就好像该元素不存在一样,因此不会在原先的位置留下空白。 绝对定位的元素相对它的包含块进行定位。position: absolute 元素的包含块是最近已定位(position属性被设置,且不是static)的祖先元素,如果没有已定位

  • 问题内容: 根据W3Schools: 相对定位的元素通常用作绝对定位元素的容器块。 为什么是这样?有没有很好的例子? 问题答案: 一个很好的例子是当您想将某些内容放置到页面上或相对于容器/ div放置时。 这向您显示,如果绝对div不在“相对” div内,则内容将与文档主体对齐。 请注意,绿色div()的div内部()的对齐方式为的上/右对齐。 蓝色框()具有与绿色框()完全相同的HTML布局,但

  • 问题内容: 请考虑以下代码: 具有绝对定位的元素明显使容纳箱“忘记”他需要的高度。 我需要在“节”(section)框内进行绝对定位,对此还有其他解决方案吗? 在此先感谢geronimo 编辑 使用表并不是真正的选择,我需要某种“多级” /“嵌套”布局,其中第二个col始终位于同一位置: (当然没有“ |”的情况下) 问题答案: 使用时,该元素将从正常页面流中删除。因此,它不再影响其容器元素的布局

  • 问题内容: 在itext中,我有一个块/短语/段落(我不介意哪个),我想将页面上的其他位置放置在例如300 x 200的位置。我该怎么做? 问题答案: 最后,我编写了自己的方法。

  • 问题内容: 如何确定OrganizationUnit(from )的绝对ID ?当我从树中选择一个节点时,organizationUnit应该显示选定的节点。我不能使用相对ID,因为p:ajax元素与organizationUnit组件不在同一命名容器中。在这种情况下,我需要使用绝对ID。使用Firebug时,组件的ID为。这不是组件的绝对ID吗? 编辑1 custom:include的配置如下:

  • 我正试图保持我的页脚div在底部的网站,以避免空白下,它在较短的页面。当我将页脚的位置设置为绝对时,响应式菜单按钮似乎相对于页脚而不再相对于页眉取其位置。当我把它从绝对状态改变回来时,它正常工作。它几乎就像是将自己与页脚菜单而不是页眉菜单相关联,但我看不出为什么会发生这种情况的好理由。此外,当我登录到WordPress时,顶部菜单栏(在前端)会以同样的方式被下推。然而,这是不会发生的,直到视口命中